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

使用 golang 返回一个空数组而不是 null 用于使用 gin 返回的 json

使用 golang 返回一个空数组而不是 null 用于使用 gin 返回的 json

Go
海绵宝宝撒 2023-06-19 15:37:21
所以我有一个结构:type ProductConstructed struct {    Name string `json:"Name"`    BrandMedals []string `json:"BRAND_MEDALS"`}当我用杜松子酒返回我的对象时:func  contructproduct(c *gin.Context) {    var response ProductConstructed     response.Name = "toto"    c.JSON(200, response)}func main() {    var err error    if err != nil {        panic(err)    }    //gin.SetMode(gin.ReleaseMode)    r := gin.Default()    r.POST("/constructProductGo/v1/constructProduct", contructproduct)    r.Run(":8200") // listen and serve on 0.0.0.0:8080}它返回我:无效的代替[]如何返回空数组?问候
查看完整描述

2 回答

?
qq_花开花谢_0

TA贡献1835条经验 获得超6个赞

所以解决方案是用以下方法初始化它:

productConstructed.BrandMedals = make([]string, 0)


查看完整回答
反对 回复 2023-06-19
?
翻翻过去那场雪

TA贡献2065条经验 获得超13个赞

只是为了阐明上述解决方案为何有效:


slice1已声明,但未定义。尚未为其分配任何变量,它等于nil. 序列化后,它将返回null.


slice2被声明和定义。它等于一个空切片,而不是nil. 序列化后,它将返回[].


var slice1 []string  // nil slice value

slice2 := []string{} // non-nil but zero-length


json1, _ := json.Marshal(slice1)

json2, _ := json.Marshal(slice2)


fmt.Printf("%s\n", json1) // null

fmt.Printf("%s\n", json2) // []


fmt.Println(slice1 == nil) // true

fmt.Println(slice2 == nil) // false

去游乐场:https://play.golang.org/p/m9YEQYpJLdj

查看完整回答
反对 回复 2023-06-19
  • 2 回答
  • 0 关注
  • 344 浏览
慕课专栏
更多

添加回答

举报

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