golang 规范中的可分配性问题

Nic*_*k B 5 go language-specifications

在阅读 go 规范“可分配性”部分时,我尝试执行几个示例以更好地理解该主题,但现在我不知道我在代码中做错了什么。

根据规范,将值x分配给类型变量的情况之一T如下:

x 的类型 V 和 T 具有相同的基础类型,并且 V 或 T 中至少有一个不是定义的类型。

定义的类型规范指出

类型定义创建一个新的、不同的类型,其底层类型和操作与给定类型相同,并为其绑定一个标识符。

但是当我尝试运行以下代码时,构建失败:

func main() {
    type Defined int32
    var d Defined
    var i int32
    d = i
}
Run Code Online (Sandbox Code Playgroud)

输出是:

cannot use i (type int32) as type Defined in assignment
Run Code Online (Sandbox Code Playgroud)

同时,具有复合文字的类似示例工作正常:

func main() {
    type MyMap map[string]int
    var x MyMap 
    var y map[string]int
    x = y
}
Run Code Online (Sandbox Code Playgroud)

操场

Bur*_*dar 6

同样来自规范:

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

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