nil slice — no underlying array. Empty slice — has underlying array.
Nil slice:
1var s []int // nil slice2fmt.Println(s == nil) // true3fmt.Println(len(s)) // 04fmt.Println(cap(s)) // 0
Empty slice:
1s := make([]int, 0) // Empty slice2s := []int{} // Empty slice3s := []int{1, 2, 3}[0:0] // Empty slice45fmt.Println(s == nil) // false6fmt.Println(len(s)) // 07fmt.Println(cap(s)) // > 0
JSON marshaling:
null.[].Best practice: