基本型別介紹
Golang 有更明確的數字型別命名,支援 Unicode,支援常用資料結構。
支援八進位制、 十六進位制,以及科學記數法。標準庫 math 定義了各數字型別取值範圍。
a, b, c, d := 071, 0x1F, 1e9, math.MinInt16
空指標值 nil,而非C/C++ NULL。
基本型別應用:
bool:只能存true和false uint uint8 uint16 uint32 uint64 uintptr byte // uint8 的別名 :字元型別 rune // int32 的別名,代表一個Unicode碼,用UTF-8 進行編碼。
rune 型別在什麼時候使用呢?
例如需要遍 歷字串中的字元。可以迴圈每個位元組(僅在使用US ASCII 編碼字串時與字元等價, 而它們在Go 中不存在!)。因此為了獲得實際的字元,需要使用rune 型別。
string rune byte 的關係
在Go當中 string底層是用byte陣列存的,並且是不可以改變的。
例如:
package main import "fmt" func main() { s := "Go程式設計" fmt.Println(len(s)) }
輸出結果應該是8因為中文字元是用3個位元組存的。
package main import "fmt" func main() { s := len(string(rune('編'))) fmt.Println(s) }
輸出結果是3
如果想要獲得我們想要的情況的話,需要先轉換為rune切片再使用內建的len函式
package main import "fmt" func main() { s := "Go程式設計" fmt.Println(len([]rune(s))) }
輸出結果是4
所以用string儲存unicode的話,如果有中文,按下標是訪問不到的,因為你只能得到一個byte。 要想訪問中文的話,還是要用rune切片,這樣就能按下表訪問。
float32 float64
complex64 complex128
與匯入語句一樣,變數的定義“打包”在一個語法塊中。
int,uint 和 uintptr 型別在32位的系統上一般是32位,而在64位系統上是64位。當你需要使用一個整數型別時,你應該首選 int,僅當有特別的理由才使用定長整數型別或者無符號整數型別。
值型別:
變數直接儲存值,記憶體通常在棧中分配。 獲取變數的地址,用&,比如: var a int, 獲取a的地址:&a 基本資料型別int、float、bool、string以及陣列和struct。