Avatar ·

如何在Go中正确初始化空切片:var s []int vs s := make([]int, 0)?

大家好!我最近开始学习Go,遇到了初始化空切片的问题。似乎有两种流行的方法: 1. `var s []int` — 声明但不初始化(nil切片) 2. `s := make([]int, 0)` — 通过make初始化为空切片 我读到过这两种方法都可以使用,并且在某些情况下它们的行为相同。例如,如果我执行`fmt.Println(s)`,两种情况下都会输出`[]`。但我注意到在JSON序列化时出现了奇怪的行为。下面是一个例子: ```go package main import ( "encoding/json" "fmt" ) type MyStruct struct { Items []string } func main() { s1 := MyStruct{} s2 := MyStruct{Items: []string{}} json1, _ := json.Marshal(s1) json2, _ := json.Marshal(s2) fmt.Println(string(json1)) // {"Items":null} fmt.Println(string(json2)) // {"Items":[]} } ``` 为什么一种情况输出`null`,而另一种输出空数组?这让人困惑,尤其是当我在处理