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

使用空接口或空结构作为映射值有什么区别?

使用空接口或空结构作为映射值有什么区别?

Go
慕运维8079593 2021-07-29 22:32:18
我正在使用这个构造来模拟一个集合type MyType uint8map[MyType]interface{}然后我添加我所有的键并将它们映射到nil.我了解到也可以使用map[MyType]struct{}使用空结构与interface{}.
查看完整描述

3 回答

?
隔江千里

TA贡献1906条经验 获得超10个赞

内存使用情况。例如,类型struct{}, interface{}, 和bool,


package main


import (

    "fmt"

    "unsafe"

)


func main() {

    var s struct{}

    fmt.Println(unsafe.Sizeof(s))

    var i interface{}

    fmt.Println(unsafe.Sizeof(i))

    var b bool

    fmt.Println(unsafe.Sizeof(b))

}

输出(32 位架构的字节):


0

8

1

输出(64 位架构的字节):


0

16

1


查看完整回答
反对 回复 2021-08-02
?
茅侃侃

TA贡献1842条经验 获得超21个赞

空结构体和空接口虽然在语法上相似,但实际上是对立的。空结构不包含任何数据;空接口可以保存任何类型的值。如果我看到 a map[MyType]struct{},我立即知道不会存储任何值,只会存储键。如果我看到 a map[MyType]interface{},我的第一印象将是它是一个异质的值集合。即使我看到代码在其中存储了 nil,我也不确定是否有其他代码段没有在其中存储其他内容。

换句话说, usingstruct{}使您的代码更具可读性。它还可以节省一点内存,如另一个答案中所述,但这只是使用正确工具进行工作的附带好处。


查看完整回答
反对 回复 2021-08-02
  • 3 回答
  • 0 关注
  • 166 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信