有什么不同?是map[T]bool优化map[T]struct{}?Go 的最佳实践是什么?也许使用的最佳理由map[T]struct{}是您不必回答“如果值为false” ,这意味着什么?
3 回答
largeQ
TA贡献2039条经验 获得超8个赞
来自“Go 编程语言”:
没有字段的结构类型称为空结构,书面形式
struct{}。它的大小为零并且不携带任何信息,但仍然可能有用。一些 Go 程序员使用它而不是 bool 作为表示集合的映射的值类型,强调只有键是有意义的,但节省空间是微不足道的,语法也比较麻烦,所以我们通常避免使用它。
如果您使用bool“集合”中的存在测试会稍微好一些,因为您可以说:
if mySet["something"] {
/* .. */
}
绝地无双
TA贡献1946条经验 获得超4个赞
空结构与其他结构类型一样。您习惯于使用普通结构的所有属性同样适用于空结构。您可以声明一个structs{}s数组,但它们当然不消耗存储空间。
var x [100]struct{}
fmt.Println(unsafe.Sizeof(x)) // prints 0
如果空结构不包含数据,则无法确定两个struct{}值是否不同。
考虑到上述陈述,这意味着我们可以将它们用作方法接收器。
type S struct{}
func (s *S) addr() { fmt.Printf("%p\n", s) }
func main() {
var a, b S
a.addr() // 0x1beeb0
b.addr() // 0x1beeb0
}
- 3 回答
- 0 关注
- 474 浏览
添加回答
举报
0/150
提交
取消
