匿名类型声明通过“ var”与“:=”的工作方式不同

时间:2019-02-25 02:06:29

标签: go

虽然在Go中声明了一个具有匿名类型的变量,但我发现var vv:=的语法是不同的。假设我们要声明一个空的匿名结构类型实例,并将其分配给变量。

这有效:

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

为什么会这样?

1 个答案:

答案 0 :(得分:9)

var v struct{}的类型为v,类型为struct{},但未明确设置值,因此它的值为零。{}

t := struct{}不是完整的表达式。您需要t := struct{}{}来创建类型为t的{​​{1}}并将其值设为struct {}

换句话说,{}是一种类型,但是用struct{}创建t需要一个值,而不仅仅是右侧的类型。 :=是编写匿名空结构的文字形式的方式。