Go語言中的資料型別包含兩種:
- 基本資料型別(原生資料型別):整型、浮點型、布林型、字串、字元(byte、rune)
- 複合資料型別(派生資料型別):指標(pointer)、陣列(array)、切片(slice)、對映(map)、函式(function)、結構體(struct)、通道(channel)
整型
整型分為兩大類
- 按長度分:int8、int16、int32、int64、int
- 無符號整型:uint8、uint16、uint32、uint64、uint
其中,uint8就是byte型、int16對應C語言中的short型、int64對應C語言中的long型
序號 | 型別和描述 |
---|---|
1 | uint8:無符號8位整型(0到255)【2的8次方】 |
2 | uint16:無符號16位整型(0到65535)【2的16次方】 |
3 | uint32:無符號32位整型(0到4292967295)【2的32次方】 |
4 | uint64:無符號位64位整型(0到 18446744073709551615)【2的64次方】 |
5 | int8:有符號8位整型(-128到127) |
6 | int16:有符號16位整型(-32768到32767) |
7 | uint32:有符號32位整型(-2147483648到2147483647) |
8 | uint64:有符號位64位整型(-9223372036854775808到 9223372036854775807) |
還有其他數字型別
序號 | 型別和描述 |
---|---|
1 | byte 類似 uint8 |
2 | rune 類似int32 |
3 | uint 32或者64位,根據電腦機器的位數決定 |
4 | int 與uint一樣大小 |
5 | uintptr 無符號整型,用於存放一個指標 |
當超過資料型別所要求的長度時,就會報錯:constant xxx overflows byte。
字元
下面看一下 byte 和 rune 到底是不是 我們上面描述的,分別 對應 uint8 和 int32,程式碼如下,我們還是列印出變數的型別 和 值:
package main
import "fmt"
func main() {
a := 100
var b byte = 100
var c rune = 200
fmt.Printf("%T %v \n", a , a)
fmt.Printf("%T %v \n", b , b)
fmt.Printf("%T %v \n", c , c)
}
複製程式碼
輸出結果如下:
int 100
uint8 100
int32 200
複製程式碼
事實證明,我們上面描述的是沒有問題的。實際上,我們通常不會將 byte 和 rune 直接賦值為 數字型別,我們通常 賦值為 字元,類似於 Java 中的 char,如下:
var e byte = 'a'
var f rune = 'A'
fmt.Printf("%T %v \n", e , e)
fmt.Printf("%T %v \n", f , f)
複製程式碼
輸出結果如下:
uint8 97
int32 65
複製程式碼
那麼,byte 和 rune 有什麼區別呢?我們先來看一個例子,假設 將 上面的 f 值 賦值為 漢字 大寫的 一,那麼 是怎麼樣的結果呢,然後將 e 的 值也賦值為 “一”,結果是什麼呢?
我們會發現,將 f 賦值為 “一”,輸出 為:int32 19968;將 e 賦值為 “一”,會報一個異常:constant 19968 overflows byte,這是因為 byte 即 uint8 的最大值 是 255,而 “一” 對應的值 為 19968,遠遠大於 uint8 的最大值。
byte 和 rune 的區別如下:
- byte型:其實就是 uint8 的別名,代表了一個ASCLL 碼的一個字元
- rune型:其實就是 int32 ,代表了一個UTF-8字元,當需要處理中文等 unicode 字符集時就要用到 rune 型別
字串
字串在Go語言中是以基本資料型別出現的。
在Go語言中,字串 即可以單行定義,又可以多行定義,單行定義 不需要闡述,下面我們介紹下定義多行字串
- 雙引號書寫字串被稱為字串字面量,這種字面量不能跨行;
- 多行字串需要使用 “·” 反引號(位於Tab鍵上面的一個),多用於內嵌原始碼 和 內嵌資料;
- 在反引號中的所有程式碼不會被編譯器識別,而只是作為字串的一部分
當我們想 將 一段程式碼作為 字串輸出的時候,我們 發現 要輸出 就只能 調為一行,但Go語言給我們提供了 多行字串,如下:
temp := `
a := 100
var b byte = 256
var c rune = 200
fmt.Printf("%T %v \n", a , a)
fmt.Printf("%T %v \n", b , b)
fmt.Printf("%T %v \n", c , c)
`
fmt.Println(temp)
複製程式碼
輸出結果如下:
a := 100
var b byte = 256
var c rune = 200
fmt.Printf("%T %v \n", a , a)
fmt.Printf("%T %v \n", b , b)
fmt.Printf("%T %v \n", c , c)
複製程式碼
這樣就可以講 我們拷貝的一段程式碼 原樣輸出。
以上主要講解了 基本資料型別,後續 會繼續講解 派生資料型別。
歡迎關注我的公眾號,第一時間接收文章推送~ 搜尋公眾號: 翻身碼農把歌唱 或者 掃描下方二維碼: