为了账号安全,请及时绑定邮箱和手机立即绑定

golang 中的 map[T]struct{} 和 map[T]bool

golang 中的 map[T]struct{} 和 map[T]bool

Go
哔哔one 2022-01-10 17:20:39
有什么不同?是map[T]bool优化map[T]struct{}?Go 的最佳实践是什么?也许使用的最佳理由map[T]struct{}是您不必回答“如果值为false” ,这意味着什么?
查看完整描述

3 回答

?
largeQ

TA贡献2039条经验 获得超8个赞

来自“Go 编程语言”:

没有字段的结构类型称为空结构,书面形式 struct{}。它的大小为零并且不携带任何信息,但仍然可能有用。一些 Go 程序员使用它而不是 bool 作为表示集合的映射的值类型,强调只有键是有意义的,但节省空间是微不足道的,语法也比较麻烦,所以我们通常避免使用它。

如果您使用bool“集合”中的存在测试会稍微好一些,因为您可以说:

if mySet["something"] {

    /* .. */

}


查看完整回答
反对 回复 2022-01-10
?
冉冉说

TA贡献1877条经验 获得超1个赞

区别在于内存要求。bonnet 下的 empty struct 不是指针,而是一个特殊的值来节省内存。


查看完整回答
反对 回复 2022-01-10
?
绝地无双

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

}


查看完整回答
反对 回复 2022-01-10
  • 3 回答
  • 0 关注
  • 474 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号