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

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

除了使用接口和使用擴展運算符之外如何創(chuàng)建動態(tài)結構

除了使用接口和使用擴展運算符之外如何創(chuàng)建動態(tài)結構

Go
動漫人物 2023-03-15 13:50:31
我正在嘗試使用 Go 和 Fiber 框架創(chuàng)建新的 API。我正在使用 MongoDB。請參考我下面的結構type Product struct {    Name           string              `json:"name"`    Code           string              `json:"code"`    Description    string              `json:"description"`    Brand          string              `json:"brand"`    Variants       []map[string]string `json:"variants"`    Categories     []int               `json:"categories"`}Variants 字段將有另一組對象數(shù)組。但是這些領域?qū)⑹莿討B(tài)的。所以我無法定義結構?,F(xiàn)在我用 []map[string][string] 解決了這個問題。我在這里的任務是用以下格式形成 CSV 文件。[{    Name: "Rock",    Code: "RRR"    Description: "This is rock"    Brand: "R"    ...variants},{    Name: "Rock",    Code: "RRR"    Description: "This is rock"    Brand: "R"    ...variants},{    Name: "Rambo",    Code: "RAM"    Description: "This is Rambo"    Brand: "RA"    ...variants},{    Name: "Rambo",    Code: "RAM"    Description: "This is Rambo"    Brand: "RA"    ...variants}]每行只有變體會發(fā)生變化。其他人將保持不變,我形成了除變體之外的其他領域。我無法創(chuàng)建結構,因為數(shù)據(jù)是動態(tài)的。我有很多困惑如何為動態(tài)字段創(chuàng)建結構如何在根級別傳播變體我來自javascript。所以,我們使用了傳播運算符。在這里,我對如何在 Golang 中做到這一點感到困惑。
查看完整描述

1 回答

?
互換的青春

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

如果您愿意,可以使用反射動態(tài)構造新結構


下面是一個例子:


package main


import (

    "encoding/json"

    "fmt"

    "reflect"

)


type DynamicMap map[string]interface{}


type Product struct {

    Name        string            `json:"name"`

    Code        string            `json:"code"`

    Description string            `json:"description"`

    Brand       string            `json:"brand"`

    Variants    map[string]string `json:"variants"`

    Categories  []int             `json:"categories"`

}


func (j Product) MarshalJSON() ([]byte, error) {

    m := DynamicMap{}

    t := reflect.TypeOf(j)

    v := reflect.ValueOf(j)

    for i := 0; i < t.NumField(); i++ {

        if t.Field(i).Tag.Get("json") == "variants" {

            dyn := v.Field(i).Interface().(map[string]string)

            for key, val := range dyn {

                m[key] = val

            }

        } else if t.Field(i).Type.Kind() == reflect.String {

            m[t.Field(i).Tag.Get("json")] = v.Field(i).String()

        } else {

            m[t.Field(i).Tag.Get("json")] = v.Field(i)

        }


    }

    return json.Marshal(m)

}


func (j Product) UnmarshalJSON(data []byte) error {

    fmt.Println("Unmarshal...")

    return json.Unmarshal(data, &j)

}


func main() {

    p := Product{Name: "aa", Variants: map[string]string{"a": "a", "b": "b"}}

    marshal, err := json.Marshal(p)

    if err != nil {

        fmt.Printf("%v\n", err)

    }

    fmt.Printf("%s\n", marshal)

}


{"a":"a","b":"b","brand":"","categories":{},"code":"","description":"","name":"aa"} 


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

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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