首页 > 后端开发 > Golang > 如何以编程方式确定 Go 结构体的大小?

如何以编程方式确定 Go 结构体的大小?

Linda Hamilton
发布: 2024-12-18 13:22:25
原创
959 人浏览过

How Can I Programmatically Determine the Size of a Go Struct?

以编程方式获取 Go 结构体的大小

计算 Go 结构体的大小需要了解底层类型和对齐要求。

不安全包方法

unsafe 包中的 Sizeof 方法返回变量的大小或结构。不过,需要注意的是,这个大小不包括变量引用的内存。

import "unsafe"

func GetStructSize(s interface{}) int {
    return int(unsafe.Sizeof(s))
}
登录后复制

手动计算结构体大小

结构体的大小取决于其字段的类型和它们出现的顺序。以下是一些指导原则:

  • 基本类型:1 字节(bool、int8、uint8)、2 字节(int16、uint16)、4 字节(int32、uint32、float32)、8 字节(int64、 uint64、float64、指针)。
  • 字符串:16 个字节(两个8 字节对齐)
  • 切片:24 字节(三个 8 字节对齐)
  • 数组:n * 其元素类型的大小
  • 字段与其大小对齐。如果字段的大小不能被对齐方式整除,则会添加填充。

例如:

type Coord3d struct {
    X, Y, Z int64
}

// Size of Coord3d is 24 bytes (3 * 8 bytes)
登录后复制

使用在线服务验证大小

您可以还可以使用 [Go游乐场](https://play.golang.org/):

func main() {
    type Coord3d struct {
        X, Y, Z int64
    }
    
    fmt.Println(unsafe.Sizeof(Coord3d{})) // Outputs: 24
}
登录后复制

以上是如何以编程方式确定 Go 结构体的大小?的详细内容。更多信息请关注PHP中文网其他相关文章!

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