我正在编写一个泛型函数,它可以获得任何类型的结构并返回该结构的大小,类似于C语言中的 sizeof 函数。
我试图使用界面和反射这样做,但我无法得到正确的结果。代码如下
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.我是golang的新手,请帮助我。
答案 0 :(得分:8)
您获得reflect.Value
结构的大小,而不是接口T
中包含的对象的大小。幸运的是,reflect.Type
有Size()
方法:
size := reflect.TypeOf(T).Size()
这给了我40,这是有意义的,因为填充。