int/int8/int16/int32/int64 表示不同長度的整數
uint/uint8/uint16/uint32/uint64 表示不同長度的無符號整數
uintptr 表示乙個用來儲存指標位址的整數
uintptr只是儲存位址的值,不能直接進行指標操作
float32/float64 浮點數
complex64/complex128 複數
byte 表示乙個位元組,是uint8的別名
rune 表示乙個unicode字元,是int32的別名
go語言中使用變長的字元,如果將字串拆成字元處理,需要用到rune 型別
將乙個整數賦值給變數時,如果不指定型別,則預設是int型別
string 表示乙個字串
struct{} 表示乙個結構體,其中的成員稱為字段
`*type`表示`type`的指標型別
`[num]type`表示`type`的陣列型別
其中`num`可以用`...`代替,表示根據元素的數量決定陣列的長度
`type`表示`type`的切片型別
`map[keytype]valuetype` 表示乙個對映型別
go中的對映的鍵的型別可以不是字串而是其他任何型別
inte***ce{} 表示乙個介面,其中的成員稱為方法
介面是一種duck型別,即當乙個型別實現類介面中定義的所有方法時,它就實現了介面,而不需要顯式的宣告
乙個沒有定義任何方法的介面被稱為空介面,這個介面可以接收任何值
需要注意的是`inte***ce{}`是指介面的切片型別,它的元素可以使任何值。而不是說他是任何型別的切片型別
`inte***ce{}`不能接收`int`的值,只能通過遍歷的方式將`int`的元素取出,逐個放入`inte***ce{}`
當接收元素型別不固定的容器型別的值時,應該直接用`inte***ce{}`,此時需要配合`reflect`包使用
go語言中有零值的概念,如果建立了乙個變數,但是還沒指定它的值,那麼它當前的值就是零值,而不會像其他語言一樣必須先指定乙個值否則就會發生錯誤
從map型別的變數中獲取乙個鍵對應的值,如果這個鍵不存在,則會返回乙個零值的元素而不是報錯
零值可以用`reflect.valueof(a).iszero()`判斷
只有兩個變數的型別相同才能進行比較
當其中乙個值是直接量的時候,能自動將直接量轉換成相應的型別
當兩個值是結構體時,可以比較兩個值是否相等,此時比較的是結構體的所有字段是否相等
當兩個值是指標時,比較的是指標的值,而不是它們指向的值
數字之間可以相互轉換,比如`int64(num)`
字串可以轉換成位元組切片或字元切片`byte("hello")`/`rune("hello")`
型別轉換是直接改變變數的型別,而不改變它的值
str := strconv.itoa(1)
num, err := strconv.atoi("1")
實際上是使用相應的值進行一一替換,而不是簡單的轉換型別
_i, ok := i.(int)
_i2, ok := i.(inte***ce{})
將介面型別的值斷言為其他型別 Go語言 基本型別
首先看一下在go中,一些基礎型別在記憶體中是以什麼形態存在的,如下圖所示 變數j的型別是int32,而變數i的型別是int,兩者不是同乙個型別,所以賦值操作i j是一種型別錯誤cannot use j type int32 as type int in assignment。正確的方式應該是 i i...
Go 基本型別
標準整形是按長度進行分類的,其中uint8為byte型,int16為c語言中的short型,int64為c語言中的long型別。型別描述 uint8 無符號 8位整型 0 到 255 uint16 無符號 16位整型 0 到 65535 uint32 無符號 32位整型 0 到 4294967295...
go 基本型別
go有許多預定義型別,這裡簡單把它們分為基本型別和高階型別。下面是基本型別列表 go的基本型別共有18個,其中int和uint的實際寬度會根據計算架構的不同而不同。在386計算架構下,它的寬度為32位元,即4個位元組。在amd64計算架構下,它們的寬度為64位元,即8個位元組。byte型別可以看作u...