当前位置: 首页 > 面试题库 >

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

夏昌胤
2023-03-14
问题内容

我正在编写一个通用函数,该函数可以获取任何类型的结构并返回该结构的大小,类似于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,这是有填充意义的。



 类似资料:
  • c.h 得到这样的结果: 这似乎不正确, 我正在golang寻找类似的东西:mvar.VI32 谢谢 我的头很痛,不擅长C / C, 这是我的场景,调用一个SDK(带有.so库) c.h 我试着用Go语言调用函数ASFGetActiveFileInfo,如下所示: 得到这个错误: 尝试: 得到这个错误 这个问题有什么解决方案吗? 感谢@peterSO的回答,它工作,但仍然显示错误: 事实非常接近

  • 问题内容: 是否有可能以某种方式获取MySQL数据库的结构,或者只是一些具有简单查询的表? 还是有另一种方法,我该怎么办? 问题答案: 我认为你所追求的是 您也可以使用 获取数据库中表的列表。

  • 问题内容: 我基本上想在C语言中使用python等效: 但在python中,我声明了一个数组,如: 问题是我想给随机插槽分配值,例如: 但由于数组为空,所以我无法使用python做到这一点。 问题答案: 如果按“数组”实际上是指Python列表,则可以使用 要么

  • 问题内容: 我想将一个结构转换为Golang中的地图。如果我可以在创建的地图中使用JSON标签作为键(否则默认为字段名称),那也将很好。 编码愉快!:) 原始帖子 到目前为止,我具有此功能,我正在使用反射包,但我不太了解如何使用该包,请多多包涵。 我也查看了JSON包的源代码,因为它应该包含我所需的实现(或部分实现),但理解得并不多。 问题答案: 我也需要这样的东西。我正在使用将结构转换为地图的内

  • 问题内容: 我正在尝试编写一个可以处理json响应的结构类型 由于键每次都不相同…不同的响应可能包含或多或少的键,不同的键,如您所见,使用50x100返回特定大小的多个图像,我如何创建与此匹配的结构? 我可以这样: 用于单个项目,以及用于特定键的列表。但是包含的结构看起来如何? 就像是: 可能有效,但我无法列举所有可能的图像尺寸响应。另外,Image_Urls末尾没有真正的列表。我希望能够将其直接

  • 函数名称:获取通知音量最大值 函数功能: 获取通知音量最大值 函数方法 vol = device.getNotificationVolume() 返回值 类型 说明 vol number 通知音量最大值 函数用例 --获取通知音最大音量 maxvol = device.getNotificationVolume() dialog(maxvol,5000) 注意事项 目前积木编程函数和触动精灵函