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

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

Linda Hamilton
Linda Hamilton原创
2024-12-18 13:22:25966浏览

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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn