需要以 [] 这种格式传递空切片而不是 ""

我有一个带有 body 属性的 api

输入 Reg struct{ Env []string json:"env" }

在调用 api 时,我需要将“env”的值作为可选参数传递。即以这种格式env: [],而不是env: ""  任何人都可以帮助。

我试过使用 len(env)==0 但它将 "" 和 [] 都设为空。我也尝试过使用 reflect.ValueOf(Reg.Env).Kind() == reflect.Slice 来区分 "" 和 [] 但它只将这两个值作为切片。


白板的微信
浏览 151回答 2
2回答

慕尼黑8549860

如果检查 的错误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 []stringhttps://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

慕沐林林

根据您需要发送的内容,有多种选择:情况 A: Reg{}将被 json 序列化为{"env": null}案例 B: Reg{Env: []string{} }将被 json 序列化为{"env": []}案例 C:如果,omitempty像这样添加到 struct 标签中:type Reg struct {    Env []string `json:"env,omitempty"`}然后Reg{}将被json序列化为{}请参阅此处的代码示例:https ://go.dev/play/p/lKI91VCoI0V
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go