Go 类型系统#
Underlying Type#
- 每一个类型都有自己的
Underlying Type- 如果
T是Pre-declaredtype 或者Type Literal,它们对应的Underlying Type就是自身T- 比如
type T int的Underlying Type是intint是Pre-declared
type T map[int]string的Underlying Type是map[int]stringmap[int]string是Type Literal
- 比如
- 否则
T的Underlying Type是T定义时引用的类型的Underlying Type
- 如果
Underlying Type 相同#
如果两个 type 的 Underlying Type 相同,则它们可以有以下特性:
如果两个 type 都是 named type ,彼此之间不能相互赋值
type NewString string var my string ="a" // cannot use my (type string) as type NewString in assignment // 虽然它们的 Underlying Type 都是 string,但 string 类型的 my 不能赋值给 NewString 类型的 you var you NewString = my如果两个 type 其中一个是 Unnamed Type,彼此之间可以相互赋值
package main type Ptr *int //named type type Map map[int]string type MapMap Map func main() { var p *int var mm Map var mmm MapMap // m1 m2 是 Unnamed Type var m1 map[int]string = mm var m2 map[int]string = mmm var ptr Ptr = p print(ptr) print(m1) print(m2) }
原因: 如果为一个类型起了名字,说明你想要做区分,所以两个 named types 即使 Underlying Type 相同也是不能相互赋值的。
参考:
叶王 © 2013-2026 版权所有。如果本文档对你有所帮助,可以请作者喝饮料。