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

golang规范中的可分配性问题

golang规范中的可分配性问题

Go
缥缈止盈 2022-04-26 15:52:55
在阅读 go 规范“可分配性”部分时,我尝试执行几个示例以更好地理解该主题,现在我无法理解我在代码中做错了什么。根据规范,值x可分配给类型变量的一种T情况如下:x 的类型 V 和 T 具有相同的基础类型,并且 V 或 T 中的至少一个不是定义的类型。定义的类型规范指出类型定义创建一个新的、不同的类型,它具有与给定类型相同的基础类型和操作,并将标识符绑定到它。但是当我尝试运行以下代码时,构建失败:func main() {    type Defined int32    var d Defined    var i int32    d = i}输出是:cannot use i (type int32) as type Defined in assignment同时,使用复合文字的类似示例也可以正常工作:func main() {    type MyMap map[string]int    var x MyMap     var y map[string]int    x = y}
查看完整描述

2 回答

?
撒科打诨

TA贡献1934条经验 获得超2个赞

同样来自规范:

https://golang.org/ref/spec#Numeric_types

为了避免可移植性问题,所有数字类型都是定义类型,因此是不同的


查看完整回答
反对 回复 2022-04-26
?
牧羊人nacy

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

由于type Defined int32定义了一个新类型,d并且i没有相同的类型;因此,第一个子句x 的类型与可分配性规范中的 T 相同适用的。第二个子句x 的类型 V 和 T 具有相同的基础类型,并且 V 或 T 中的至少一个不是已定义类型不适用,因为两者的类型都是id定义类型。由于可分配性规范中的其余条款不适用于这种情况,因此分配失败。更改type Defined int32type Defined = int32(别名类型)修复了错误。

x = y由于T 是一个接口类型,并且 x 实现了可分配性规范中的 T 子句是适用的。


查看完整回答
反对 回复 2022-04-26
  • 2 回答
  • 0 关注
  • 160 浏览
慕课专栏
更多

添加回答

举报

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