我正在使用此构造来模拟一组
type MyType uint8
map[MyType]interface{}
Run Code Online (Sandbox Code Playgroud)
然后我添加所有键并将它们映射到nil.
我了解到它也可以使用
map[MyType]struct{}
Run Code Online (Sandbox Code Playgroud)
使用空结构的任何好处interface{}.
pet*_*rSO 31
内存使用情况.例如,类型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))
}
Run Code Online (Sandbox Code Playgroud)
输出(32位架构的字节数):
0
8
1
Run Code Online (Sandbox Code Playgroud)
输出(64位架构的字节数):
0
16
1
Run Code Online (Sandbox Code Playgroud)
参考文献:
and*_*olm 21
空结构和空接口虽然在语法上相似,但实际上是对立的.空结构不包含任何数据; 空接口可以包含任何类型的值.如果我看到了map[MyType]struct{},我立即知道没有值存储,只有密钥.如果我看到了map[MyType]interface{},我的第一印象就是它是一个异质的价值观集合.即使我看到代码存储在其中的nil,我也不确定其他一些代码不会在其中存储其他内容.
换句话说,使用struct{}使您的代码更具可读性.它还节省了一点内存,如另一个答案中所述,但这只是使用正确工具的一项附带好处.
| 归档时间: |
|
| 查看次数: |
9679 次 |
| 最近记录: |