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

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

在 Go 中有沒有辦法將結構映射轉換為結構切片

在 Go 中有沒有辦法將結構映射轉換為結構切片

Go
偶然的你 2022-05-10 14:03:47
我必須將結構映射轉換為 Golang 中的結構切片,即下面指定的源結構到目標結構。// Sourcevar source map[string]Categorytype Category struct {    A           int    SubCategory map[string]SubCategory}type SubCategory struct {    B int    C string}// Targetvar target []OldCategorytype OldCategory struct {    OldA           int `mapstructure:"A"`    OldSubCategory []OldSubCategory}type OldSubCategory struct {    OldB int    `mapstructure:"B"`    OldC string `mapstructure:"C"`}我指的是地圖結構包(“github.com/mitchellh/mapstructure”)。從源轉換為目標的一種方法是在源實例中迭代所有子類別,然后是類別,并使用 mapstructure.Decode() 單獨轉換每個子類別。有沒有使用mapstructure包的直接方法,其中我使用NewDecoder和DecoderConfig.DecodeHook創建一個自定義解碼器鉤子,每當我遇到源作為結構的映射和目標作為結構的切片時,我都會在DecodeHookFunc函數中處理它。mapstructure 的相關文檔 https://godoc.org/github.com/mitchellh/mapstructure#NewDecoder
查看完整描述

3 回答

?
ITMISS

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

您可以使用 mapstructure 解碼器掛鉤,在解碼器掛鉤內編寫自定義邏輯來完成您的工作。但是沒有標準的 lib 函數來完成你的工作。


例子:


dc := &mapstructure.DecoderConfig{Result: target, DecodeHook: customHook}

    ms, err := mapstructure.NewDecoder(dc)

    if err != nil {

        return err

    }


    err = ms.Decode(source)

    if err != nil {

        return err

    }


func customHook(f reflect.Type, t reflect.Type, data interface{}) (interface{}, error) {

if f.Kind() == reflect.Int && t.Kind() == reflect.Bool {

    var result bool

    if data == 1 {

        result = true

    }

    return result, nil


}

因此,只要它具有您的自定義邏輯,您就可以使用自定義掛鉤從技術上將任何內容解碼為任何內容。


查看完整回答
反對 回復 2022-05-10
?
FFIVE

TA貢獻1797條經驗 獲得超6個贊

使用嵌套的 for 循環:


for _, c := range source {

    oc := OldCategory{OldA: c.A}

    for _, sc := range c.SubCategory {

        oc.OldSubCategory = append(oc.OldSubCategory, OldSubCategory{OldB: sc.B, OldC: sc.C})

    }

    target = append(target, oc)

}


查看完整回答
反對 回復 2022-05-10
?
慕村9548890

TA貢獻1884條經驗 獲得超4個贊

在 Go 中有沒有辦法將結構映射轉換為結構切片

不,對此沒有語言結構或語法糖。


查看完整回答
反對 回復 2022-05-10
  • 3 回答
  • 0 關注
  • 153 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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