go沒有隱式類型轉換例如"zifu" + 1這種會直接報錯;只有顯示類型轉換,有兩種方式:
①類型斷言:x.(T) 檢查x的動態類型是否是T,其中x必須是接口類型的值,會返回兩個值,第一個是對應類型的值,第二個是bool類型,通過它來判斷是否轉換正確(如果相同則返回斷言成功的類型值,不相同則返回斷言類型的默認值)
var a interface{}
a = "zifu"
re, ok := a.(int)
fmt.Println(re, ok, a)
------------------------
輸出:0 false zifu
②type (a):適用於普通變量類型int, float, string,不過要注意float和string之間不能強轉,要用到strconv包
var a int32 = 10
var b int64 = int64(a)
指針類型的則需要用到unsafe包
var a int = 10
var b *int = &a
var c *int64 = (*int64)(unsafe.Pointer(b))