我正在编写一个通用函数来获取任何类型结构的大小,类似于 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/