我正在使用这个构造来模拟一个集合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
茅侃侃
TA贡献1842条经验 获得超21个赞
空结构体和空接口虽然在语法上相似,但实际上是对立的。空结构不包含任何数据;空接口可以保存任何类型的值。如果我看到 a map[MyType]struct{}
,我立即知道不会存储任何值,只会存储键。如果我看到 a map[MyType]interface{}
,我的第一印象将是它是一个异质的值集合。即使我看到代码在其中存储了 nil,我也不确定是否有其他代码段没有在其中存储其他内容。
换句话说, usingstruct{}
使您的代码更具可读性。它还可以节省一点内存,如另一个答案中所述,但这只是使用正确工具进行工作的附带好处。
- 3 回答
- 0 关注
- 166 浏览
添加回答
举报
0/150
提交
取消