虽然在Go中声明了一个具有匿名类型的变量,但我发现var v
和v:=
的语法是不同的。假设我们要声明一个空的匿名结构类型实例,并将其分配给变量。
这有效:
func main() {
var v struct {}
_ = v
但这不是:
func main() {
t := struct{}
_ = t
}
编译此命令将产生以下错误(https://play.golang.org/p/MgbttbBVmYE):
prog.go:8:7: type struct {} is not an expression
为什么会这样?
答案 0 :(得分:9)
var v struct{}
的类型为v
,类型为struct{}
,但未明确设置值,因此它的值为零。{}
。
t := struct{}
不是完整的表达式。您需要t := struct{}{}
来创建类型为t
的{{1}}并将其值设为struct {}
。
换句话说,{}
是一种类型,但是用struct{}
创建t
需要一个值,而不仅仅是右侧的类型。 :=
是编写匿名空结构的文字形式的方式。