用于获取golang中任何结构大小的泛型函数

suj*_*jin 6 go

我正在编写一个泛型函数,它获取任何类型的结构并返回该结构的大小,类似于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)
}
Run Code Online (Sandbox Code Playgroud)

这段代码返回错误的结果为12.我是golang的新手,请帮助我.

Tho*_*mas 8

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

size := reflect.TypeOf(T).Size()
Run Code Online (Sandbox Code Playgroud)

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

  • 或者,您可以使用`unsafe.Sizeof(myType {})`. (4认同)