我有一個帶有 body 屬性的 api
型別 Reg struct{ Env []string json:"env"
}
在呼叫 api 時,我需要將“env”的值作為可選引數傳遞。即以這種格式env: [],而不是env: ""
任何人都可以幫忙。
我試過使用 len(env)==0 但它把 "" 和 [] 都當作空。我也嘗試過使用 reflect.ValueOf(Reg.Env).Kind() == reflect.Slice 來區分 "" 和 [] 但它只將兩個值都作為切片。
uj5u.com熱心網友回復:
例如,如果您檢查錯誤json.Unmarshal,您將知道用戶是否傳遞了無效輸入。
var r struct { Env []string `json:"env"` }
if err := json.Unmarshal([]byte(`{"env": ""}`), &r); err != nil {
fmt.Println(err)
}
產生此錯誤訊息:
json: cannot unmarshal string into Go struct field .env of type []string
https://go.dev/play/p/LozhJ14C7zj
當您使用解碼器時也會發生同樣的情況。即來自http請求正文。
var r struct { Env []string `json:"env"` }
dec := json.NewDecoder(strings.NewReader(`{"env": ""}`))
if err := dec.Decode(&r); err != nil { fmt.Println(err) }
https://go.dev/play/p/_XpY3jquxVx
uj5u.com熱心網友回復:
根據您需要發送的內容,有多種選擇:
案例A:
Reg{}將被json序列化為{"env": null}
案例B:
Reg{Env: []string{} }將被json序列化為{"env": []}
案例C:如果,omitempty像這樣添加到結構標簽中:
type Reg struct {
Env []string `json:"env,omitempty"`
}
然后Reg{}將被json序列化為{}
在此處查看代碼示例:https ://go.dev/play/p/lKI91VCoI0V
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/450159.html
下一篇:在Go中遞回迭代結構陣列
