2 回答

TA貢獻(xiàn)1827條經(jīng)驗 獲得超8個贊
問題是你沒有傳遞 a Packet
,你傳遞的map[string]interface{}
是 a ,就 Go 而言,這是一種完全不同的類型。
如果您使用pack := make(Packet)
or pack := Packet{}
,它將按預(yù)期工作。

TA貢獻(xiàn)1789條經(jīng)驗 獲得超10個贊
到目前為止的答案和評論是誤解,混淆,或者至少在類型斷言和類型轉(zhuǎn)換之間的區(qū)別中刷了很多細(xì)節(jié)。
語法thing.(AType)
是類型斷言。它將在運行時進(jìn)行評估。何時成功(即ok == true
)的標(biāo)準(zhǔn)可以歸結(jié)為兩種情況:
thing
從字面上看是 typeAType
。不是像您的Packet
.AType
是接口,thing
滿足接口。
在所有其他情況下,ok
將是false
(或者如果您使用單值版本foo := bar.(Baz)
,foo
將是適當(dāng)?shù)牧阒担?/p>
語法AType(thing)
是類型轉(zhuǎn)換。它將在編譯時進(jìn)行評估。類型轉(zhuǎn)換要求內(nèi)存中的結(jié)構(gòu)AType
和任何類型thing
都是相同的。
因此,在您的示例中,類型斷言packet, ok := pack.(Packet)
導(dǎo)致ok == false
因為Packet
是非接口類型,并且packet
不是字面上的那種類型,而是類型map[string]interface
。
但是,您可以進(jìn)行類型轉(zhuǎn)換Packet(pack)
,因為類型Packet
和變量pack
具有相同的底層內(nèi)存結(jié)構(gòu),map[string]interface{}
- 2 回答
- 0 關(guān)注
- 210 瀏覽
添加回答
舉報