在"Go in Action"一书中,作者写道"两种不同类型的值不能彼此分配,即使它们是兼容的".
例如,我们不能分配Duration给int64或int64给Duration.
但这并非总是如此,以下赋值将像X值[]int自动转换回来一样:
type X []int
var v []int = X([]int{1, 2, 3})
Run Code Online (Sandbox Code Playgroud)
这两种情况有什么区别?
Sno*_*man 12
我将引用您的规范并摘录最有意义的行:
在任何这些情况下,值x可分配给类型为T的变量("x可赋予T"):
...
- x的类型V和T具有相同的基础类型,并且V或T中的至少一个不是命名类型.
在您的示例中,基础类型适用[]int于每种情况,[]int并且不是命名类型而是切片.一个int实际上构成一个命名的类型(在宇宙中的块预先声明)和将具有本身作为一个基本的类型,但[]int所详述的是不是一个命名类型这里:
预先声明了布尔,数字和字符串类型的命名实例.可以使用类型文字构造复合类型 - 数组,结构,指针,函数,接口,切片,映射和通道类型.
每种类型T都有一个基础类型:如果T是预先声明的布尔,数字或字符串类型之一,或者是类型文字,则相应的基础类型是T本身.否则,T的底层类型是T在其类型声明中引用的类型的基础类型.
因此,如果您尝试制作type X int,则无法将其指定var v int为int命名类型,并且不符合规范中给出的可分配性条件.
| 归档时间: |
|
| 查看次数: |
798 次 |
| 最近记录: |