亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

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

如何在 mapstructure.decode 中傳遞結構字段的指針

如何在 mapstructure.decode 中傳遞結構字段的指針

Go
手掌心 2023-03-29 17:23:02
我正在嘗試借助 mapstructure 庫將地圖解碼為結構類型。如果我使用普通變量進行解碼,它可以解碼,但如果我傳遞結構字段,它不會解碼地圖:package mainimport (    "github.com/mitchellh/mapstructure")type Person struct {    Name string}type Bundle struct {    Name string    Struct interface{}}func main() {    p_map := map[string]string{        "Name": "John",    }    p := Person{}    mapstructure.Decode(p_map, &p)    print(p.Name) // shows name John    b := Bundle{        "person"        Person{},    }    mapstructure.Decode(p_map, &b.Struct)    print(b.Struct.(Person).Name) // Does not show any name. Blank}您能否澄清我是否為地圖解碼傳遞了錯誤的存儲空間,或者這只是地圖結構限制,我無法將地圖解碼為結構字段?謝謝你!
查看完整描述

2 回答

?
翻閱古今

TA貢獻1780條經驗 獲得超5個贊

我認為你必須稍微改變一下實現


var p1 Person


mapstructure.Decode(p_map, &p1)

b := Bundle{

    p1,

}


print(b.Struct.(Person).Name) // John will appear

我正在嘗試上面的代碼,但導致 empty Person。也許Decode函數不能改變的實際值b.Struct(我不確定確切的原因,這只是我的意見),但如果我Person先解碼為結構然后分配給Bundle那個作品。


更新:通過一些研究,我發現了問題所在。您必須使用指針而不是結構。這里是更新的代碼


package main


import (

    "github.com/mitchellh/mapstructure"

)


type Person struct {

    Name string

}


type Bundle struct {

    Name   string

    Struct interface{}

}


func main() {

    p_map := map[string]string{

        "Name": "John",

    }


    p := &Person{}

    mapstructure.Decode(p_map, &p)


    print(p.Name) // shows name John


    b := Bundle{

        "person",

        &Person{},

    }


    mapstructure.Decode(p_map, &b.Struct)


    print(b.Struct.(*Person).Name) // Does not show any name. Blank


}


查看完整回答
反對 回復 2023-03-29
?
斯蒂芬大帝

TA貢獻1827條經驗 獲得超8個贊

將 Bundle 中的 Struct 字段類型從 interface{} 更改為 Person 后,它對我有用。


type Bundle struct {

    Struct Person

}

print(b.Struct.Name)


查看完整回答
反對 回復 2023-03-29
  • 2 回答
  • 0 關注
  • 154 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號