Go 为什么我可以为变量指定不同类型的值?
在《行动起来》一书中,作者写道“两种不同类型的值不能相互分配,即使它们是兼容的” 例如,我们不能将Go 为什么我可以为变量指定不同类型的值?,go,Go,在《行动起来》一书中,作者写道“两种不同类型的值不能相互分配,即使它们是兼容的” 例如,我们不能将Duration分配给int64或int64分配给Duration 但这并不总是正确的,以下赋值的工作方式类似于将X值自动转换回[]int: type X []int var v []int = X([]int{1, 2, 3}) 这两种情况的区别是什么?我会让您参考以下内容,并在这里摘录最有意义的内容: 在以下任何情况下,值x可分配给T类型的变量(“x可分配给T”): x的类型V和T具有相同
Duration
分配给int64
或int64
分配给Duration
但这并不总是正确的,以下赋值的工作方式类似于将X
值自动转换回[]int
:
type X []int
var v []int = X([]int{1, 2, 3})
这两种情况的区别是什么?我会让您参考以下内容,并在这里摘录最有意义的内容:
在以下任何情况下,值x可分配给T类型的变量(“x可分配给T”):
- x的类型V和T具有相同的底层类型,并且V或T中至少有一个不是命名类型李>
[]int
,而[]int
不是命名类型,而是切片。int
实际上将构成一个命名类型(在universe块中预先声明),并将自身作为一个基础类型,但[]int
并非详细说明的命名类型:
布尔型、数值型和字符串型的命名实例为
预先声明。复合类型数组、结构、指针、函数、,
接口、切片、贴图和通道类型可以使用类型
文字
每个类型T都有一个基础类型:如果T是预声明的类型之一
布尔、数字或字符串类型,或类型文字
对应的底层类型是T本身。否则,T是潜在的
类型是T在其类型中引用的类型的基础类型
声明
因此,如果您尝试将type X int
分配给var v int
,因为int
是一种命名类型,不符合规范中给出的可分配标准