首页  >  文章  >  后端开发  >  Go Maps 中的匿名结构:`struct{}{}` 和 `{}` 有什么区别?

Go Maps 中的匿名结构:`struct{}{}` 和 `{}` 有什么区别?

DDD
DDD原创
2024-10-30 03:55:03435浏览

 Anonymous Struct in Go Maps: What's the Difference Between `struct{}{} `and `{}`?

匿名结构:深入研究 struct{}{} 和 {} 之间的差异

问题:

Go 中,在映射声明中使用匿名结构体作为值会引发 Gogland 警告,并提出问题:在这种上下文中 struct{}{} 和 {} 声明之间有什么区别?

答案:

理解这两种语法背后的语义至关重要。

分解声明

  • struct{}{}:这是一个复合字面量,由匿名结构类型 struct{} 和值 {} 组成。
  • {}:这也是一个复合字面量,仅表示值 {},而没有显式表示指定其类型。

类型推断和复合文字

通常,复合文字需要显式类型声明(例如,[]int{1, 2, 3})。但是,在使用映射时,编译器可以从映射类型本身推断键和值的类型。这允许简化复合文字语法,在提供适当类型的值时省略类型声明。

Go 规范和监督

根据 Go 规范,在这些情况下,当复合文字的类型与映射期望的类型匹配时,可以省略类型声明。此行为最初是一个疏忽,但在 Go 1.5 中成为有效功能。

注意: 在初始化其他类型的复合文字(例如数组、切片)时,不能省略类型声明。

以上是Go Maps 中的匿名结构:`struct{}{}` 和 `{}` 有什么区别?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn