Types 戈朗下伏类型

Types 戈朗下伏类型,types,go,Types,Go,在这个规范的代码片段中 type T1 string type T2 T1 type T3 []T1 type T4 T3 说明书上说: 字符串的基本类型,T1和T2是string []T1、T3和T4的基本类型是[]T1 为什么T2的底层类型不是T1,而是string? 如果T1的基础类型是string,那么T4的基础类型不应该是[]string而不是[]T1 困惑。 每个类型T都有一个基础类型:如果T是预先声明的布尔、数字或字符串类型之一,或者是类型文字,则相应的基础类型是T本身。 否则,

在这个规范的代码片段中

type T1 string
type T2 T1
type T3 []T1
type T4 T3
说明书上说:

字符串的基本类型,
T1
T2
string

[]T1
T3
T4
的基本类型是
[]T1

为什么
T2
的底层类型不是
T1
,而是
string

如果
T1
的基础类型是
string
,那么
T4
的基础类型不应该是
[]string
而不是
[]T1
困惑。

每个类型
T
都有一个基础类型:如果
T
是预先声明的布尔、数字或字符串类型之一,或者是类型文字,则相应的基础类型是
T
本身。
否则,
T
的基础类型是
T
在其类型声明中引用的类型的基础类型

T2
在其类型声明中引用了
T1
,它具有底层类型
string

T2
的底层类型必须是
string
,因为它有助于

值x可分配给类型T的变量(“x可分配给T”)
x的类型V和T具有相同的底层类型,并且V或T中至少有一个不是a

这在“”中也有详细说明


说到基础类型
T4
,我们谈论的是基础未命名类型
[]T1

同样,可分配性规则表示可以将
[]T1
分配给T4(因为
[]T1
不是命名类型):其基础类型在第一个未命名类型(
[]T1
)处停止

输出:

t3='%+v' [a b]
t4='%+v' [a b]
t4='%+v' [c d]
t3='%+v' [a b]
t4='%+v' [a b]
t4='%+v' [c d]