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

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

mapstructure 如何使用鑒別器來解碼具體類型

mapstructure 如何使用鑒別器來解碼具體類型

Go
飲歌長(zhǎng)嘯 2023-06-01 15:05:08
文檔 ( https://github.com/mitchellh/mapstructure ) 提到了 mapstructure 解碼的好處{  "type": "person",  "name": "Mitchell"}我正在尋找一個(gè)顯示解碼過程的示例,例如解組 aPerson或Petclass
查看完整描述

1 回答

?
胡說叔叔

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

該庫(kù)僅將地圖映射到結(jié)構(gòu)。它不進(jìn)行特定于類型的解碼。引用其文檔:

如果不首先從 JSON 中讀取“類型”字段,我們可能無法填充特定結(jié)構(gòu)。我們總是可以對(duì) JSON 進(jìn)行兩次解碼(首先讀取“類型”,然后再讀取其余部分)。然而,將它解碼成一個(gè)結(jié)構(gòu)要簡(jiǎn)單得多map[string]interface{},讀取“type”鍵,然后使用類似這個(gè)庫(kù)的東西將它解碼成正確的結(jié)構(gòu)。

它所提供的只是您只需將 JSON 源解析一次,然后將其解析為映射,然后您可以自己決定需要映射或解組為哪種類型。然后你就可以使用已經(jīng)構(gòu)建好的地圖來填充你需要的類型。

看這個(gè)例子:

type Person struct {

    Name string `json:"name"`

}


type Credentials struct {

    User     string `json:"user"`

    Password string `json:"password"`

}


func main() {

    for _, src := range []string{srcPerson, srcCredentials} {

        var m map[string]interface{}

        if err := json.Unmarshal([]byte(src), &m); err != nil {

            panic(err)

        }


        switch m["type"] {

        case "person":

            var p Person

            if err := mapstructure.Decode(m, &p); err != nil {

                panic(err)

            }

            fmt.Printf("%T %+v\n", p, p)

        case "credentials":

            var c Credentials

            if err := mapstructure.Decode(m, &c); err != nil {

                panic(err)

            }

            fmt.Printf("%T %+v\n", c, c)

        }

    }

}


const srcPerson = `{

  "type": "person",

  "name": "Mitchell"

}`


const srcCredentials = `{

  "type": "credentials",

  "user": "bob",

  "password": "secret"

}`

輸出:


main.Person {Name:Mitchell}

main.Credentials {User:bob Password:secret}


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

添加回答

舉報(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)