gpt4 book ai didi

go - 通用函数来获取 Go 中任何结构的大小

转载 作者:IT王子 更新时间:2023-10-29 01:18:30 24 4
gpt4 key购买 nike

我正在编写一个通用函数来获取任何类型结构的大小,类似于 C 中的 sizeof 函数。

我正在尝试使用接口(interface)和反射来执行此操作,但我无法获得正确的结果。代码如下:

package main

import (
"fmt"
"reflect"
"unsafe"
)

func main() {
type myType struct {
a int
b int64
c float32
d float64
e float64
}
info := myType{1, 2, 3.0, 4.0, 5.0}
getSize(info)
}

func getSize(T interface{}) {
v := reflect.ValueOf(T)
const size = unsafe.Sizeof(v)
fmt.Println(size)
}

此代码返回错误结果 12。我是 Go 的新手,请帮助我。

最佳答案

您获得的是 reflect.Value 结构的大小,而不是接口(interface) T 中包含的对象的大小。幸运的是,reflect.Type 有一个 Size() 方法:

size := reflect.TypeOf(T).Size()

这给了我 40,这是有道理的,因为有填充。

关于go - 通用函数来获取 Go 中任何结构的大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31338588/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com