获取golang中任何结构大小的通用函数

获取golang中任何结构大小的通用函数,go,Go,我正在编写一个泛型函数,它可以获取任何类型的结构并返回该结构的大小,类似于C语言中的sizeof函数 我试图使用接口和反射来实现这一点,但我无法得到正确的结果。代码如下 package main import ( "fmt" "reflect" "unsafe" ) func main() { type myType struct { a int b int64 c float32 d float

我正在编写一个泛型函数,它可以获取任何类型的结构并返回该结构的大小,类似于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()
方法:

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

这给了我40,这是有意义的,因为填充。

或者,您可以使用
unsafe.Sizeof(myType{})
@thwd您是对的,但是我的getSize函数必须找到任何结构的大小,它必须在运行时找到结构的类型。正因为如此,我选择了反射包