Они эквивалентны. В общем: Spec: Short variable declaration:
короткой декларация переменной используется синтаксис:
ShortVarDecl = IdentifierList ":=" ExpressionList .
Это сокращение для регулярного variable declaration с инициализатором выражениями, но нет типов:
"var" IdentifierList = ExpressionList .
Так что эта строка:
a := [3]int{369, 0, 963}
равносильна этому:
var a = [3]int{369, 0, 963}
Но так как в списке выражения является composite literal типа [3]int
, следующие одно и то же:
var a [3]int = [3]int{369, 0, 963}
Spec: Variable declaration:
Если тип присутствует, каждой переменной присваивается этот тип. В противном случае каждой переменной присваивается тип соответствующего значения инициализации в присваивании.
Таким образом, вы можете использовать любой из следующих, все объявлять и инициализировать переменную типа [3]int
:
a := [3]int{369, 0, 963}
b := [...]int{369, 0, 963}
var c = [3]int{369, 0, 963}
var d [3]int = [3]int{369, 0, 963}
var e [3]int = [...]int{369, 0, 963}
var f = [...]int{369, 0, 963}
Примечания:
Обратите внимание, что в составных литералов, она действует до не перечислять все значения. Элементы, значение которых явно не указано, будет zero value типа элемента. Вы можете включить необязательный индекс перед значением в перечислении, чтобы указать элемент, значение которого оно будет.
Spec: Composite literals:
Для получения массива и среза литералов применяются следующие правила:
- Каждый элемент имеет связанный с ним целое индекс маркировки своей позиции в массиве.
- Элемент с ключом использует ключ в качестве индекса; ключ должен быть константным целочисленным выражением.
- Элемент без ключа использует индекс предыдущего элемента плюс один. Если первый элемент не имеет ключа, его индекс равен нулю.
Поскольку ваш первоначальный массив содержит 0
, который является нулевым значением для типа int
элемента, вы можете исключить его из буквальных. Для того, чтобы создать и инициализировать переменную в значение [3]int{369, 0, 963}
, вы также можете сделать это следующим образом:
// Value at index 1 implicitly gets 0:
g := [3]int{369, 2: 963}
h := [...]int{369, 2: 963}
Попробуйте все примеры на Go Playground.
Смотрите этот вопрос более подробно + практические примеры: Keyed items in golang array initialization