Go 为什么接口的init会出错
我的意思是,接口甚至可以包含类似struct的复合类型Go 为什么接口的init会出错,go,Go,我的意思是,接口甚至可以包含类似struct的复合类型 type A struct { } func main() { var a interface{} = A{} } 奇怪的是,接口不能通过下面的大括号初始化 type C interface { } func main() { _ = C{} } 此处编译结果:无效的复合文字类型CC是接口类型,因此无法使用复合文字进行初始化 复合文字为结构、数组、切片和 映射并在每次评估时创建新值 要使代码编译,可以执行以下操作
type A struct {
}
func main() {
var a interface{} = A{}
}
奇怪的是,接口不能通过下面的大括号初始化
type C interface {
}
func main() {
_ = C{}
}
此处编译结果:无效的复合文字类型CC
是接口类型,因此无法使用复合文字进行初始化
复合文字为结构、数组、切片和
映射并在每次评估时创建新值
要使代码编译,可以执行以下操作:
type C interface {
}
func main() {
_ = C(nil)
}
你认为这段代码应该做什么?接口不是结构或映射,因此{}在这里没有任何含义XXXX,那么接口的类型是什么?@hunlin我不确定我是否理解这个问题,你能试着重新表述它吗?@hunlin注意,
type
关键字后面跟一个标识符和一个类型规范,是一个。另外请注意,正如答案中已经指出的,不是每种类型都可以使用复合文字表达式初始化。这就是语言的规则。规范中就是这样定义语言的。如果你觉得设计怪异,如果你认为它不一致,或者你有其他问题,如果你认为这是个好主意,你可以试着向语言的作者提出这个问题。@hunlin除了接口类型,还有其他类型不能用复合文字表达式初始化,例如,如果您有键入MyString字符串
,则无法执行\=MyString{}
。type
关键字并不意味着你可以使用{}
.Thx,伙计。我对这个语法已经困惑了好几天了