登录
首页 >  Golang >  Go问答

Go - gin.Context.JSON 返回时为空切片

来源:stackoverflow

时间:2024-04-07 23:54:33 305浏览 收藏

在Golang实战开发的过程中,我们经常会遇到一些这样那样的问题,然后要卡好半天,等问题解决了才发现原来一些细节知识点还是没有掌握好。今天golang学习网就整理分享《Go - gin.Context.JSON 返回时为空切片》,聊聊,希望可以帮助到正在努力赚钱的你。

问题内容

如果 resp 是带有切片成员的结构,如下所示:

type mystruct struct {
    data  []struct {
        name        string `json:"name"`
    } `json:"data"`
}
func Something(c *gin.Context) {
    result := make(chan MyStruct, 1)
    go func() {
        resp, _ := Calculate()  // if return empty slice
        fmt.Println(result)     // output: {[]}
        result <- resp
    }()
    
    c.JSON(http.StatusOK, <-result) // output: {"data": null}
}

是否可以将最后的输出 <-result 改为 {"data": []}?


正确答案


fmt 包打印 nil 切片与空切片相同:[]

json/encoding 包区分了 nil 切片和空切片。 nil 切片编码为 nil,空切片编码为 []

要获得预期的输出,请将数据字段设置为空切片:

resp.data = []struct {
    name string `json:"name"`
}{}

为了使这更容易,请为数据字段声明一个命名类型:

type data struct {
    name string `json:"name"`
}

type mystruct struct {
    data []data `json:"data"`
}

使用以下方法将字段设置为空切片:

resp.data = []data{}

使用 short variable declaration 和包含空切片的 composite literal 将此赋值与变量声明组合起来:

resp := MyStruct{Data: []Data{}}

文中关于的知识介绍,希望对你的学习有所帮助!若是受益匪浅,那就动动鼠标收藏这篇《Go - gin.Context.JSON 返回时为空切片》文章吧,也可关注golang学习网公众号了解相关技术文章。

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>