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]