我应该如何在 Go 中定义一个空切片?

How should I define an empty slice in Go?

或者更准确地说,似乎我可以做这三件事中的任何一件。它们之间有什么区别吗?哪个最好,为什么?

  1. var foo []int
  2. foo := []int{}
  3. foo := make([]int, 0)

区别是:

  1. 是一个零切片 (foo == nil)。
  2. 和 3. 是非零切片 (foo != nil)。

以下几点对于所有三个陈述都是正确的:

  • 语句没有分配内存。
  • 切片长度为零:len(foo) == 0
  • 切片容量为零:cap(foo) == 0

Playground example

因为 len, cap and append 使用 nil 切片,所以 (1) 通常可以与 (2) 和 (3) 互换使用。

Go 代码中常用的所有选项。