首页 > 后端开发 > Golang > 空结构体或空接口:Go 中哪个映射值更好?

空结构体或空接口:Go 中哪个映射值更好?

Susan Sarandon
发布: 2024-12-01 03:32:13
原创
466 人浏览过

Empty Struct or Empty Interface: Which is the Better Map Value in Go?

空接口与空结构作为映射值

在 Go 中,映射用于存储键值对。映射的值类型可以是任何类型,包括接口或结构。虽然空接口和空结构都可以用来表示映射中没有值,但两者之间存在一些关键区别。

内存使用

无论架构如何,空结构的固定大小均为 0 字节。另一方面,空接口的大小在 32 位体系结构上为 8 字节,在 64 位体系结构上为 16 字节。这是因为空接口存储指向实际值的指针,即使该值为零。

问题中提供的示例代码演示了这种差异:

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
登录后复制

如您所见,空结构体的内存开销为 0 字节,而空接口的内存开销为 8 字节(32 位)或 16 字节(64 位)。

性能

就性能而言,使用空结构通常比使用空接口更有效。这是因为编译器可以更有效地优化涉及空结构的操作。

结论

根据映射的值类型在空接口和空结构之间进行选择根据申请的具体要求。如果内存使用是一个问题,空结构是更好的选择。出于性能原因,空结构也是首选。但是,如果地图打算与各种值类型一起使用,则空接口可能更合适。

以上是空结构体或空接口:Go 中哪个映射值更好?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板