深入研究 Go 中 struct{} 和 struct{}{} 的本质
Go 利用结构体的概念来定义以下序列:命名元素。虽然 struct{} 和 struct{}{} 可能看起来很相似,但它们具有细微的区别。
struct{}:零大小的空结构
结构{ } 表示没有定义元素的结构。它的存在主要是为了不保存任何数据。其较小的尺寸可以实现高效的内存利用,而不需要额外的空间。
struct{}:空结构的复合文字
相反,struct{}{} 构造struct{} 类型的值。其语法特点是结构体类型后跟空大括号,因为不存在字段。
实践中利用 struct{}:创建集合
Go 本质上缺乏集合数据结构,但地图提供了一个可行的替代方案。通过将映射的值类型定义为 struct{},我们创建了一个仅存储键的集合类似物。此技术保持了地图中键的唯一性。
例如:
var set map[string]struct{} set = make(map[string]struct{}) set["red"] = struct{}{} set["blue"] = struct{}{} _, ok := set["red"] fmt.Println("Is red in the map?", ok)
地图功能展示键的存在或不存在,模仿设置行为。
以上是Go 中的 struct{} 和 struct{}{} 有什么区别?的详细内容。更多信息请关注PHP中文网其他相关文章!