Go分配显示int
错误,但[]int
切片则没有错误。
工作代码here
package main
import (
"fmt"
)
type testType []int
func main() {
var i testType
var t []int
t = i
fmt.Println("Hello, playground", t, i)
}
但是,如果为int
类型,编译器肯定会显示错误here:
cannot use i (type testType) as type int in assignment
package main
import (
"fmt"
)
type testType int
func main() {
var i testType
var t int
t = i
fmt.Println("Hello, playground", t, i)
}
为什么自定义int
类型而不是自定义[]int
类型会出错?
答案 0 :(得分:2)
在Go language specification中为分配类型进行了定义:
值x可分配给类型T的变量(“ x可分配给 T“)如果满足以下条件之一:
- x的类型与T相同。
- x的类型V和T具有相同的基础类型,并且V或T中至少有一个不是已定义类型。
- T是接口类型,x实现T。
- x是双向通道值,T是通道类型,x的类型V和T具有相同的元素类型,并且V或T中的至少一个是 不是定义的类型。
- x是预定义的标识符nil,T是指针,函数,切片,映射,通道或接口类型。
- x是可由类型T的值表示的无类型常量。
在您的情况下,[]int
是切片,而不是命名类型。这就是为什么编译器没有抱怨的原因。有关命名类型的更多信息,请通过Go specification输入类型:
类型确定值的集合以及特定于值的操作 这种类型的。类型可以是命名的或未命名的。指定了命名类型 通过(可能是合格的)类型名称;未命名类型使用指定 类型文字,它从现有类型组成一个新类型。