猿问

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

在 Go 中声明具有匿名类型的变量时,我发现var vvsv:=语法的工作方式不同。想象一下,我们正在声明一个空的匿名结构类型实例并将其分配给一个变量。

这有效:

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

为什么会这样?


吃鸡游戏
浏览 95回答 1
1回答

幕布斯7119047

var v struct{}给出v类型struct{}但没有显式设置值,因此它得到零值{}。t := struct{}不是一个完整的表达式。您需要t := struct{}{}创建twith typestruct {}并赋予它 value {}。也就是说,struct{}是一个类型,但是创建twith:=需要一个值,而不仅仅是右边的一个类型。 struct{}{}是如何编写匿名空结构的字面形式。
随时随地看视频慕课网APP

相关分类

Go
我要回答