make([] int,0),[] int {}和*new([] int)之间有什么区别?

yef*_*fim 3 go slice

根据https://play.golang.org/p/7RPExbwOEU,它们都打印相同并具有相同的长度和容量.初始化切片的三种方法之间有区别吗?有首选方式吗?我发现自己同时使用make([]int, 0),并[]int{}具有相同的频率.

Jim*_*imB 6

这初始化0长度切片.

make([]int, 0)
Run Code Online (Sandbox Code Playgroud)

使用make是初始化具有不同长度的特定容量的切片的唯一方法.这会分配一个长度为0的切片,但容量为1024.

make([]int, 0, 1024)
Run Code Online (Sandbox Code Playgroud)

这是一个切片文字,它也初始化0长度切片.使用此或make([]int, 0)仅是首选.

[]int{}
Run Code Online (Sandbox Code Playgroud)

这会初始化指向切片的指针,该切片会立即解除引用.切片本身尚未初始化,仍然是零,所以这基本上什么都不做,相当于[]int(nil)

*new([]int)
Run Code Online (Sandbox Code Playgroud)

  • @Adrian:“new”无法初始化切片。切片的零值是 nil,因此您会得到一个指向 nil 切片的初始化指针。https://play.golang.org/p/lVL9Tkxk_D (2认同)