В приведенном ниже коде:
var v1 []string = []string{"1"}
var v2 map[string][]string = map[string][]string{"a": []string{"1"}}
Второй можно упростить следующим образом:
var v2 map[string][]string = map[string][]string{"a": {"1"}}
В то время как первое не может быть записано как:
var v1 []string = {"1"}
Я не знаю, в какой версии в Go добавлен этот упрощенный синтаксис, и где его можно использовать, почему []string нельзя упростить?
Первый можно упростить как var v1 = []string{"1"}
Обратите внимание, что вам не нужно повторять тип слева: var v1 = []string{"1"}. Аналогично для карты (или любого другого сложного типа, если на то пошло).
Https://go.dev/ref/spec#Composite_literals говорит:
Внутри составного литерала массива, среза или типа карты T элементы или ключи карты, которые сами являются составными литералами, могут опускать соответствующий тип литерала, если он идентичен элементу или типу ключа T.
Связанный: Создание массива литерала массива в Golang
Потому что так написано в спецификации языка. «Почему?» основывается на мнении.