2 回答

TA貢獻(xiàn)1801條經(jīng)驗(yàn) 獲得超8個(gè)贊
i
不包含 an?int32
,它包含 an?int
,因此類型斷言失敗。
像這樣直接將文字值分配給一個(gè)字面值interface{}
或在簡短的變量聲明中使用一個(gè)字面值可能會(huì)有點(diǎn)令人困惑,因?yàn)槟鷮?shí)際上無法看到所獲得的值的類型;您需要了解常量“默認(rèn)類型”的規(guī)則。如果這給您帶來麻煩,您可以將其顯式轉(zhuǎn)換為類型,例如?i = int32(0)
,這將確保i
確實(shí)包含int32
.

TA貢獻(xiàn)1796條經(jīng)驗(yàn) 獲得超7個(gè)贊
不,這不是一個(gè)錯(cuò)誤,這是一個(gè)定義明確的行為。
這行:
i?=?0
是一個(gè)賦值,并且您使用無類型0
整型常量來賦值i
。由于需要一個(gè)(具體)類型來執(zhí)行賦值(并且i
s 類型interface{}
沒有定義類型),因此將使用該無類型常量的默認(rèn)類型,即int
。
答案是,無類型常量有一個(gè)默認(rèn)類型,即一種隱式類型,如果需要類型而未提供類型,則會(huì)將其轉(zhuǎn)換為值。
修改如下即可驗(yàn)證:
i2, ok := i.(int)
fmt.Println(ok)
fmt.Println(i2)
哪個(gè)輸出:
true
0
如果您要使用類型常量:
i = int32(0)
那么是的,存儲(chǔ)的值將是 類型int32,并且您將得到相同的輸出:
i = int32(0)
i32, ok := i.(int32)
fmt.Println(ok)
fmt.Println(i32)
嘗試Go Playground上的示例。
- 2 回答
- 0 關(guān)注
- 196 瀏覽
添加回答
舉報(bào)