其實前面已經涉及到了數據類型的一些知識點。從本篇開始,將帶你們仔細瞭解Go語言的數據類型。服務器
名稱 | 寬度(字節) | 零值 | 說明 |
---|---|---|---|
bool | 1 | false | 布爾類型,真用常量true表示,假用常量false表示 |
byte | 1 | 0 | 字節類型,可看做uint8的別名類型 |
rune | 4 | 0 | rune類型,專門存儲Unicode編碼,可看做uint32的別名類型 |
int/uint | - | 0 | 有符號整數類型/無符號整數類型,寬度與平臺相關 |
int8/uint8 | 1 | 0 | 由8位二進制數表示的有符號整數類型/無符號整數類型 |
int16/uint16 | 2 | 0 | 由16位二進制數表示的有符號整數類型/無符號整數類型 |
int32/uint32 | 4 | 0 | 由32位二進制數表示的有符號整數類型/無符號整數類型 |
int64/uint64 | 8 | 0 | 由64位二進制數表示的有符號整數類型/無符號整數類型 |
float32 | 4 | 0.0 | 由32位二進制數表示的浮點數類型 |
float64 | 8 | 0.0 | 由64位二進制數表示的浮點數類型 |
complex64 | 8 | 0.0 | 由64位二進制數表示的複數類型,float32類型的實部和float32類型的虛部聯合表示 |
complex128 | 16 | 0.0 | 由128位二進制數表示的複數類型,float64類型的實部和float64類型的虛部聯合表示 |
string | - | "" | 字符串類型(實質是字節序列) |
寬度的含義框架
字節(byte) | 比特(bit) | 數值範圍 |
---|---|---|
1 | 8 | 無符號 0~255,有符號 -128~127 |
2 | 16 | 無符號0~65535,有符號-32768~32767 |
4 | 32 | 無符號0~4294967295,有符號-2147483648~2147483647 |
8 | 64 | 無符號 ≈ 0~1844億億,有符號 ≈ -922億億~922億億 |
下面一塊兒來看以下示例:ide
12E+2 //浮點數字面量,表明浮點數 1200.0(12乘以10的2次方) 12e-3 //浮點數字面量,表明浮點數 0.012(12除以10的3次方) 1200.0 //浮點數字面量,能夠被簡寫爲 1200 0.012 //浮點數字面量,能夠被簡寫爲 .012 //浮點數字面量中的各個部分只能由十進制表示,而不能由八進制數和十六進制數表示 //浮點數字面量 056.78 和 56.78 都表明浮點數 56.78 12e+2 + 43.4e-3i //複數字面量,表明了複數 1200+0.0434i 0.1i //複數字面量,表明了複數 0+0.1i 1E3 //這裏能夠是複數字面量,表明了複數 1000+0i
Go語言的一個特有的數值類型rune,專門用於存儲通過Unicode編碼的字符。ui
能夠用以下的5種方式表示一個rune字面量:編碼
- 該rune字面量所對應的字符,這個字符必須是Unicode編碼規範所支持的。
- 使用「\x」爲前導並後跟兩位十六進制數。這種能夠表示一個ASCII編碼值(一個字節)。
- 使用「\」爲前導並後跟三位八進制。這種也是能夠表示一個ASCII編碼值(一個字節)。
- 使用「\u」爲前導並後跟四位十六進制。Unicode編碼規範中的UCS-2表示法(將會廢止),只能用於表示2個字節寬度的值。
- 使用「\U」爲前導並後跟八位十六進制。Unicode編碼規範中的UCS-4表示法。可用於表示4個字節的值。
rune字面量能夠支持一類特殊的字符序列------轉義符(除了最後一個特殊)以下所示:code
轉義符 | Unicode代碼點 | 說明 |
---|---|---|
\a | U+0007 | 告警鈴聲或蜂鳴聲 |
\b | U+0008 | 退格符 |
\f | U+000C | 換頁符 |
\n | U+000A | 換行符 |
\r | U+000D | 回車符 |
\t | U+0009 | 水平製表符 |
\v | U+000B | 垂直製表符 |
\\ | U+005C | 反斜槓 |
\’ | U+0027 | 單引號。僅在rune字面量中有效。 |
\」 | U+0022 | 雙引號。僅在string字面量中有效。 |
注意:在rune字面量中,除了在上面表格中出現的轉義符以外的以 \ 爲前導的字符序列都是不合法的。固然,上表中的轉義符 \" 也不能在rune字面量中出現。字符串
在Go語言中,字符串類型屬於預約義類型,表明了一個字符串值的集合。在底層,一個字符串值便是一個字節的序列。字符串的長度便是底層字節序列中字節的個數。長度爲0的序列與一個空字符串相對應。get
字符串字面量(或者說是字符串常量)表明了一個連續的字符序列,它的長度在編譯期間就能肯定。它有兩種表示格式:編譯器
1.原生字符串字面量string
它是在兩個反引號 ` 之間的字符序列。在兩個反引號之間,除了反引號以外的其餘字符都是合法的。在兩個反引號之間的內容是由若干在編譯期間就能夠肯定的字符組成。在原生字符串字面量中,不存在任何轉義符,所見既所得。另外,其中的回車符會被編譯器移除。
2.解釋型字符串字面量
它是在兩個雙引號 " 之間的字符序列。在解釋型字符串中的轉義字符都是會被成功轉義。
在字符串字面量中,轉義符 \'是不合法的,而轉義符 \」倒是合法的。這與rune字面量恰好相反,但在字符串字面量中能夠包含rune字面量。例如。在解釋型字符串字面量中,rune字面量‘\101’和‘\x41’都表明了單字節字符「A」(單字節字符就是通過UTF-8編碼格式編碼後的字節序列的大小爲1的字符);而rune字面量‘\u4E00’和‘\U00004E00’都與Unicode字符「一」相對應。中文字符「一」的Unicode代碼點爲U+4E00,它會被UTF-8編碼格式編碼爲3個字節,即「\xE4\xB8\x80」。
字符串字面量與rune字面量的本質區別是所表明的Unicode字符的數量。rune字面量僅用於表明一個Unicode字符,不管這個字符會被UTF-8編碼格式編碼爲幾個字節,而字符串字面量則用於表明一個由若干個Unicode字符組成的序列。
注意:字符串值是不可變的,對字符串的操做只會返回一個新字符串,而不是改變源字符串並返回。
以上講解了Go語言的基本數據類型,因爲篇幅過多,其餘類型放到後續博文中講解。
最後附上知名的Go語言開源框架(每篇更新一個):
Gogs: 一個國產的自助Git託管服務程序。咱們能夠用它來搭建本身的Git服務器。官網:https://gogs.io。