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

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

使用類型查找映射解組通用 json

使用類型查找映射解組通用 json

Go
烙印99 2021-12-07 18:41:32
我正在跟進(jìn)Golang 將通用 JSON 對(duì)象解碼為多種格式之一,作為解組通用 json 的一種方式。我將有許多不同的類型,其他人可以添加這些類型,因此硬編碼 case 語句是不可行的。我也不想將類型硬編碼為字符串,但讓使用庫(kù)的人選擇“查找”名稱,以防他們以后想重命名其底層結(jié)構(gòu)。我基本上是在尋找這樣的東西:type myInterface interface {  Something() // irrelevant, just to show you It's not about interface{}}type myBar struct {}       // fulfils myInterfacetype mySomething struct {} // fulfils myInterfacevar types = make(map[string]type) // <--- Obvious Pseudo code ;)types["foo:bar"] = myBar       // done by whoever uses the librarytypes["1230988"] = mySomething // ...type storageWrapper struct {  Type string  Data json.RawMessage}func loadSomething(id string) myInterface {  buf := db.load(id) // pseudo code but you get the idea  sw := &storageWrapper{}  json.Unmarshal(buf, sw)  // now the interesting part  targetType := types[sw.Type]  thing := &targetType{}  json.Unmarshal(sw.Data, thing)  return thing}我有一種感覺,我把整個(gè)問題想得太多了?;蛘呶以噲D將 Go 轉(zhuǎn)變?yōu)榕c其基本哲學(xué)相沖突的東西。我非常開放并感謝任何建議對(duì)整個(gè)問題提出不同的方法
查看完整描述

1 回答

?
MMTTMM

TA貢獻(xiàn)1869條經(jīng)驗(yàn) 獲得超4個(gè)贊

必須types是 a map[string]myInterface,并注冊(cè)一個(gè)類型,讓調(diào)用者將該類型的空值(不是引用)存儲(chǔ)到映射中。然后,要解組,您可以通過從映射中復(fù)制空值、解組到其中并返回它(或?qū)λ囊茫﹣怼矮@取類型”。接口值將完成識(shí)別所需類型的工作。另外,如果用戶希望將某些字段默認(rèn)為非零/空值,以防它們未在 JSON 中提供,他們實(shí)際上可以通過將這些值存儲(chǔ)在類型映射的結(jié)構(gòu)中來實(shí)現(xiàn)。


查看完整回答
反對(duì) 回復(fù) 2021-12-07
  • 1 回答
  • 0 關(guān)注
  • 157 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號(hào)

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