为了账号安全,请及时绑定邮箱和手机立即绑定

如何理解golang中两个命名类型相同

如何理解golang中两个命名类型相同

Go
小怪兽爱吃肉 2021-07-07 14:01:01
类型标识规则规定:Two named types are identical if their type names originate in the same TypeSpec我不太明白两个类型名称如何起源于同一个 TypeSpec。你能解释一下或者给我举个例子吗?
查看完整描述

2 回答

?
jeck猫

TA贡献1909条经验 获得超7个赞

只有一个类型名称可以源自 TypeSpec。这就是重点。所以


type Foo int64

var x Foo

var y Foo

那么两个Foos 都源自相同的 TypeSpec,因此它们是相同的Foos。


但是,如果您有两个不同的文件(在不同的包中):


前:


type Foo int64

var x Foo

b.去:


type Foo int64

var y Foo

那么Foo这种情况下的两个s就不一样了。尽管它们是相同的类型名称,但它们源自不同的 TypeSpec。这样做的结果是,类型x和y不相同(且因此x = y不进行强制转换是不允许的)。


查看完整回答
反对 回复 2021-07-12
?
HUH函数

TA贡献1836条经验 获得超4个赞

Two named types are identical if their type names originate in the same TypeSpec

事实上,在 Go 代码中不能有两个相同的命名类型。因为在 Go 代码中,originate in the same TypeSpec意味着相同的类型。说一种类型与自身相同是没有意义的。

但是我们确实有不同的命名类型,它们是相同的:byte 和 uint8;符文和 int32,根据 规范

只能在编译器中为预先声明的类型执行此操作。

参考golang 坚果中的讨论

注意:在 Go 1.9 中,将有一个名为:类型别名/别名声明的新功能。使用此功能,可以声明相同的不同命名类型。参考讲Go 1.9


查看完整回答
反对 回复 2021-07-12
  • 2 回答
  • 0 关注
  • 345 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信