该规范中提到:每个类型T都有一个底层类型:如果T是预先声明的布尔值、数字或字符串类型之一,或者类型文字,则相应的底层类型是T它自己。否则,T的基础类型是T在其类型声明中引用的类型的基础类型。T2在其类型声明中引用 to T1,它具有基础类型string。这是基础类型的重要T2要string,因为这将有助于为可转让哪里值 x 可分配给 T 类型的变量(“x 可分配给 T”)x 的类型 V 和 T 具有相同的基础类型,并且 V 或 T 中的至少一个不是命名类型。这在“ Golang:为什么我可以键入别名函数并在不强制转换的情况下使用它们? ”中也有详细说明。当谈到 的底层类型时T4,我们谈论的是底层未命名类型[]T1。再一次,可分配性规则说您可以分配[]T1给 T4(因为[]T1它不是命名类型):它的基础类型在第一个未命名类型 ( []T1)处停止。在操场上看到这个例子var t3 T3 = []T1{"a", "b"}fmt.Println("t3='%+v'", t3)// var t4 T4 = []string{}// cannot use []string literal (type []string) as type T4 in assignmentvar t4 T4 = T4(t3)fmt.Println("t4='%+v'", t4)t4 = []T1{T1("c"), T1("d")}fmt.Println("t4='%+v'", t4)输出:t3='%+v' [a b]t4='%+v' [a b]t4='%+v' [c d]