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

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

將結(jié)構(gòu)體接口轉(zhuǎn)換為相同的結(jié)構(gòu)體

將結(jié)構(gòu)體接口轉(zhuǎn)換為相同的結(jié)構(gòu)體

Go
慕村9548890 2023-07-10 16:38:11
假設(shè)我有兩個結(jié)構(gòu):type Pet {  Name string}type PetTwo {  Name string}現(xiàn)在假設(shè)我將 Pet 轉(zhuǎn)換為接口。假設(shè)我用來執(zhí)行此操作的包不了解 Pet 類型,如何從界面中鍵入 Assert PetTwo?var ctx context.Contextpet := Pet{ Name : "Foo" }ctx = context.WithValue(ctx, "pet", pet)petTwo := ctx.Value("pet").(PetTwo) // panicsfmt.Println(petTwo.Name) // prints "Foo"有沒有一種方法可以在沒有類型斷言的情況下訪問 pet 的內(nèi)容?我嘗試過將結(jié)構(gòu)相互嵌入、類型斷言、未命名類型的類型斷言等等。主要目標(biāo)是能夠Pet在不知道類型的情況下訪問包的內(nèi)容Pet。實現(xiàn)該目標(biāo)的一個丑陋的 hack 是從 json 進行編組和解組:    jsonData, _ := json.Marshal(ctx.Value("pet"))    var petTwo PetTwo    json.Unmarshal(jsonData, &petTwo)    fmt.Println(petTwo.Name) // prints "Foo"
查看完整描述

1 回答

?
喵喔喔

TA貢獻1735條經(jīng)驗 獲得超5個贊

使用reflect包訪問未知類型的Name字段:

ctx := context.WithValue(context.Background(), "pet", Pet{"Fido"})

v := reflect.ValueOf(ctx.Value("pet"))

name := v.FieldByName("Name").String()

fmt.Println(name) // prints Fido

在操場上運行它



查看完整回答
反對 回復(fù) 2023-07-10
  • 1 回答
  • 0 關(guān)注
  • 163 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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