我正在编写一个通用函数,该函数可以获取任何类型的结构并返回该结构的大小,类似于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很陌生,请帮助我。
您得到的是reflect.Value结构的大小,而不是接口中包含的对象的大小T。幸运的是,reflect.Type有一个Size()方法:
reflect.Value
T
reflect.Type
Size()
size := reflect.TypeOf(T).Size()
这给了我40,这是有填充意义的。