Как определить пустой кусок в Go?

Или, точнее, кажется, что я мог бы сделать любую из этих трех вещей. Есть ли разница между ними? Что является лучшим и почему?
  • var foo []int
  • foo := []int{}
  • foo := make([]int, 0)

Ответ 1

1) - это нулевой фрагмент.

2) и 3) являются не-нильскими срезами с нулевой длиной и нулевой емкостью.

Пример игровой площадки

Ни один из параметров не выделяет память.

Все опции обычно используются в коде Go.

Поскольку len, cap и append работают с nil-срезами, 1) часто могут быть взаимозаменяемы с 2) и 3).