Return json return 与 golang 的空数组而不是 null
Return an empty array instead of null with golang for json return with gin
所以我有一个结构:
type ProductConstructed struct {
Name string `json:"Name"`
BrandMedals []string `json:"BRAND_MEDALS"`
}
当我 return 我的对象与杜松子酒和 :
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
}
它 return 是我 :
null
而不是
[]
如何return一个空数组?
此致
所以解决方案是用 :
初始化它
productConstructed.BrandMedals = make([]string, 0)
只是为了阐明上述解决方案为何有效:
slice1
已声明,但未定义。尚未为其分配任何变量,它等于 nil
。序列化时会returnnull
.
slice2
被声明和定义。它等于一个空切片,而不是 nil
。序列化时会return[]
.
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
更多信息:https://github.com/golang/go/wiki/CodeReviewComments#declaring-empty-slices
所以我有一个结构:
type ProductConstructed struct {
Name string `json:"Name"`
BrandMedals []string `json:"BRAND_MEDALS"`
}
当我 return 我的对象与杜松子酒和 :
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
}
它 return 是我 :
null
而不是
[]
如何return一个空数组?
此致
所以解决方案是用 :
初始化它productConstructed.BrandMedals = make([]string, 0)
只是为了阐明上述解决方案为何有效:
slice1
已声明,但未定义。尚未为其分配任何变量,它等于 nil
。序列化时会returnnull
.
slice2
被声明和定义。它等于一个空切片,而不是 nil
。序列化时会return[]
.
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
更多信息:https://github.com/golang/go/wiki/CodeReviewComments#declaring-empty-slices