Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/go/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Go 为什么接口的init会出错_Go - Fatal编程技术网

Go 为什么接口的init会出错

Go 为什么接口的init会出错,go,Go,我的意思是,接口甚至可以包含类似struct的复合类型 type A struct { } func main() { var a interface{} = A{} } 奇怪的是,接口不能通过下面的大括号初始化 type C interface { } func main() { _ = C{} } 此处编译结果:无效的复合文字类型CC是接口类型,因此无法使用复合文字进行初始化 复合文字为结构、数组、切片和 映射并在每次评估时创建新值 要使代码编译,可以执行以下操作

我的意思是,接口甚至可以包含类似struct的复合类型

type A struct {

}
func main() {
    var a interface{} = A{}
}
奇怪的是,接口不能通过下面的大括号初始化

type C interface {

}
func main() {
    _ = C{}
}

此处编译结果:无效的复合文字类型C

C
是接口类型,因此无法使用复合文字进行初始化

复合文字为结构、数组、切片和 映射并在每次评估时创建新值

要使代码编译,可以执行以下操作:

type C interface {

}

func main() {
    _ = C(nil)
}

你认为这段代码应该做什么?接口不是结构或映射,因此{}在这里没有任何含义XXXX,那么接口的类型是什么?@hunlin我不确定我是否理解这个问题,你能试着重新表述它吗?@hunlin注意,
type
关键字后面跟一个标识符和一个类型规范,是一个。另外请注意,正如答案中已经指出的,不是每种类型都可以使用复合文字表达式初始化。这就是语言的规则。规范中就是这样定义语言的。如果你觉得设计怪异,如果你认为它不一致,或者你有其他问题,如果你认为这是个好主意,你可以试着向语言的作者提出这个问题。@hunlin除了接口类型,还有其他类型不能用复合文字表达式初始化,例如,如果您有
键入MyString字符串
,则无法执行
\=MyString{}
type
关键字并不意味着你可以使用
{}
.Thx,伙计。我对这个语法已经困惑了好几天了