Ответ 1
Я передам вам spec и выберет наиболее значимые строки здесь:
Значение x присваивается переменной типа T ( "x присваивается T" ) в любом из этих случаев:
...
- x тип V и T имеют одинаковые базовые типы, и по крайней мере один из V или T не является именованным типом.
В вашем примере базовый тип []int
для каждого случая, а []int
- не именованный тип, а срез. int
фактически будет представлять собой именованный тип (предварительно обозначенный в блоке юниверса) и будет иметь в качестве базового типа, но []int
не является именованным типом, как подробный здесь:
Именованные экземпляры логических, числовых и строковых типов предопределенное. Составные типы: массив, структура, указатель, функция, интерфейс, срез, карта и типы каналов - могут быть построены с использованием типа литералы.
Каждый тип T имеет базовый тип: если T является одним из предопределенных boolean, numeric или string, или литерал типа, соответствующий базовый тип - сам T. В противном случае T type - это тип типа, к которому относится T в своем типе декларация.
Поэтому, если вы попытались сделать type X int
, вы не сможете назначить его var v int
, поскольку int
является именованным типом и не будет удовлетворять критериям назначения, указанным в спецификации.