Go語言 基本型別

2021-10-07 03:53:48 字數 1609 閱讀 7268

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...