为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
白板的微信 2022-11-23 20:10:26

我有一个带有 body 属性的 api

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

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

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


查看完整描述

2 回答

?
慕尼黑8549860

TA贡献1531条经验 获得超11个赞

如果检查 的错误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


查看完整回答
反对 回复 2022-11-23
?
慕沐林林

TA贡献1748条经验 获得超9个赞

根据您需要发送的内容,有多种选择:


情况 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


查看完整回答
反对 回复 2022-11-23

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信