Ничего особенного не делает, эти две строки идентичны.
Однако, когда вы хотите использовать это, например, в операторе if
, скобки потребуются, иначе вы получите ошибку времени компиляции:
if i := Item{3, "a"}; i.Id == 3 {
}
Результат:
ожидаемое логическое выражение, найдено простое утверждение (отсутствуют круглые скобки вокруг составного литерала?) (И еще 1 ошибка)
Это происходит потому, что возникает неоднозначность синтаксического анализа: не очевидно, будет ли открывающая скобка частью составного литерала или телом оператора if
.
Использование скобок сделает его однозначным для компилятора,это работает:
if i := (Item{3, "a"}); i.Id == 3 {
}
Подробнее см .: Структура для инициализатора цикла