最近在写代码的时候,需要调用json.Marshal()函数把struct类型的数据,解析成json格式的。但是修改后发现和有的字段的值原来是空的,即[],现在却变成了null。百思之后,终于明白了其中的原因。
先说结论:
Go中的slice格式数据,在没有初始化的时候,调用了json.Marshal()函数后会变成null;经过初始化之后的slice,则会被解析成[]。
例如:
package main
import (
"encoding/json"
"fmt"
)
type A struct {
Numbers []int
}
func main() {
var R = A{}
R.Numbers = make([]int, 0)
s, _ := json.Marshal(R)
fmt.Printf("%s\n", s)
var R1 = A{}
s1, _ := json.Marshal(R1)
fmt.Printf("%s\n", s1)
}
运行结果为:
{"Numbers":[]}
{"Numbers":null}
造成这种结果的原因就是结构体中的Numbers有没有经过初始化。
var s []int
and s := make([]int, 0)
slice的初始化可以有两种:一种是 s := make([]int, 0),一种是 s := []int{}。
有疑问加站长微信联系(非本文作者)