Есть несколько способов объявить срезы в Go.

ИМО, каждый из этих способов имеет подразумеваемое значение:

  1. var foo [] T: объявите фрагмент, к которому код будет добавлять неизвестное количество элементов, и / или это количество не имеет значения.
  2. var foo = [] T {…} или foo: = [] T {…}: где - список типов элементов. T. Объявите фрагмент, в котором код уже определил, как его заполнить, и вряд ли он изменится сильно или вообще изменится, пока на него ссылаются. Предпочитаю позже. Также обозначается как return [] T {…}.
  3. foo: = make ([] T, ‹len›, ‹cap›): объявить часть известной емкости, превышение которой не ожидается при добавлении, или минимальная емкость, которая будет использоваться. Как правило, более короткая форма без емкости (например, make ([] T, ‹len›)) должна использоваться только при создании фрагмента в качестве цели цикла копирования или манипулирования диапазоном индекса.

Я считаю, что эти значения упрощают понимание и использование кода. Я призываю людей учитывать это при объявлении и использовании срезов.