如何在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`,而另一种输出空数组?这让人困惑,尤其是当我在处理