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

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

從參數動態填充結構

從參數動態填充結構

Go
忽然笑 2023-05-08 15:48:31
我有以下結構,它按預期工作我正在獲取數據并且我能夠type Service struct {    Resources    []struct {        Model struct {            Name                string `json:"name"`            Credentials         struct {                path string `json:"path"`                Vts struct {                    user string `json:"user"`                    id    string `json:"id"`                    address      string `json:"address"`                } `json:"vts"`            } `json:"credentials"`        } `json:"model"`    } `json:"resources"`}service:= Service{}err := json.Unmarshal([]byte(data), &service數據如下,服務1{    "resources": [        "model": {          "name": "cred",          "credentials": {            "path": "path in fs",            "vts": {              "user": "stephane",               "id": "123",              "address": "some address"            }          },        }      },現在一些服務在 vts 下提供額外的數據,例如現在我們有 3 個字段(用戶/ID/地址),但一些服務(服務 1)可以提供額外的數據,如電子郵件、secondName 等。但這里的大問題是我需要從參數中獲取它,因為(服務 2)教育、薪水等服務2{    "resources": [        "model": {          "name": "cred",          "credentials": {            "path": "path in fs",            "vts": {              "user": "stephane",              "id": "123",              "address": "some address",              "email" : "some email",              "secondName" : "secondName"            }          },        }      },服務 N{    "resources": [        "model": {          "name": "cred",          "credentials": {            "path": "path in fs",            "vts": {              "user": "stephane",              "id": "123",              "address": "some address",              "salary" : "1000000"            }          },        }      },當然,如果我事先知道我可以將它們全部放入結構中并使用的字段,omitempty 但我不知道,我只是將它作為函數的參數(新屬性名稱)獲取,一些服務可以在此結構中提供 10 個以上的字段(我應該得到它們關于args[]函數的屬性名稱)但我事先不知道它們,這應該是動態的......在 Golang 中有沒有很好的方法來處理它?
查看完整描述

1 回答

?
幕布斯6054654

TA貢獻1876條經驗 獲得超7個贊

如果您事先不知道這些字段,則不要使用結構,而是使用同樣“動態”的東西:地圖。


type Service struct {

    Resources []struct {

        Model struct {

            Name        string `json:"name"`

            Credentials struct {

                Path string                 `json:"path"`

                Vts  map[string]interface{} `json:"vts"`

            } `json:"credentials"`

        } `json:"model"`

    } `json:"resources"`

}

map[sting]interface{}可以保存任何類型的值。如果您知道所有字段都將保存一個string值,您也可以使用 amap[string]string以便更容易地使用它。


輸入 JSON 的示例:


{

    "resources": [

      {

        "model": {

          "name": "cred",

          "credentials": {

            "path": "path in fs",

            "vts": {

              "user": "stephane", 

              "id": "123",

              "address": "some address",

              "dyn1": "d1value",

              "dyn2": "d2value"

            }

          }

        }

      }

    ]

}

測試它:


service := Service{}

err := json.Unmarshal([]byte(data), &service)

fmt.Printf("%q %v", service, err)

輸出(在Go Playground上嘗試):


{[{{"cred" {"path in fs" map["dyn2":"d2value" "user":"stephane" "id":"123" 

    "address":"some address" "dyn1":"d1value"]}}}]} <nil>

現在,如果你想從Vts映射中收集一組鍵的值,你可以這樣做:


args := []string{"dyn1", "dyn2"}

values := make([]interface{}, len(args))

for i, arg := range args {

    values[i] = service.Resources[0].Model.Credentials.Vts[arg]

}

fmt.Println(values)

上面的輸出將是(在Go Playground上試試):


[d1value d2value]


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

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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