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

我正在使用这个构造来模拟一个集合


type MyType uint8

map[MyType]interface{}

然后我添加我所有的键并将它们映射到nil.


我了解到也可以使用


map[MyType]struct{}

使用空结构与interface{}.


慕运维8079593
浏览 167回答 3
3回答

隔江千里

内存使用情况。例如,类型struct{}, interface{}, 和bool,package mainimport (    "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 位架构的字节):081输出(64 位架构的字节):0161

茅侃侃

空结构体和空接口虽然在语法上相似,但实际上是对立的。空结构不包含任何数据;空接口可以保存任何类型的值。如果我看到 a map[MyType]struct{},我立即知道不会存储任何值,只会存储键。如果我看到 a map[MyType]interface{},我的第一印象将是它是一个异质的值集合。即使我看到代码在其中存储了 nil,我也不确定是否有其他代码段没有在其中存储其他内容。换句话说, usingstruct{}使您的代码更具可读性。它还可以节省一点内存,如另一个答案中所述,但这只是使用正确工具进行工作的附带好处。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go