第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機(jī)立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

類型斷言和接口

類型斷言和接口

Go
倚天杖 2022-01-10 14:29:58
為什么第一個示例失敗,但第二個成功?做這種斷言的正確方法是什么?示例 1 https://play.golang.org/p/4LRGQLdGPB// example 1type Packet map[string]interface{}func get(pack interface{}) {    if packet, ok := pack.(Packet); !ok {        fmt.Printf("error: %#v, %#v\n", pack, packet)    }}func main() {    pack := make(map[string]interface{})    pack["qwe"] = 123    get(pack)}// error: map[string]interface {}{"qwe":123}, main.Packet(nil)示例 2 https://play.golang.org/p/Pd9jvvNrq5// example 2type Packet map[string]interface{}func get(pack interface{}) {    var p Packet    if packet, ok := pack.(map[string]interface{}); !ok {        fmt.Printf("%#v, %#v\n", pack, packet)    } else {        p = packet    }    fmt.Printf("%#v\n", p)}func main() {    pack := make(map[string]interface{})    pack["qwe"] = 123    get(pack)}// main.Packet{"qwe":123}
查看完整描述

2 回答

?
慕仙森

TA貢獻(xiàn)1827條經(jīng)驗 獲得超8個贊

問題是你沒有傳遞 a Packet,你傳遞的map[string]interface{}是 a ,就 Go 而言,這是一種完全不同的類型。

如果您使用pack := make(Packet)or pack := Packet{},它將按預(yù)期工作。


查看完整回答
反對 回復(fù) 2022-01-10
?
至尊寶的傳說

TA貢獻(xiàn)1789條經(jīng)驗 獲得超10個贊

到目前為止的答案和評論是誤解,混淆,或者至少在類型斷言類型轉(zhuǎn)換之間的區(qū)別中刷了很多細(xì)節(jié)。

語法thing.(AType)是類型斷言。它將在運行時進(jìn)行評估。何時成功(即ok == true)的標(biāo)準(zhǔn)可以歸結(jié)為兩種情況:

  1. thing從字面上看是 type AType。不是像您的Packet.

  2. 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{}


查看完整回答
反對 回復(fù) 2022-01-10
  • 2 回答
  • 0 關(guān)注
  • 210 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號