go - 如何使用反射包在 Golang 中正确创建切片?
问题描述
我有一个函数,它采用结构类型并尝试传入 areflect.Type
并稍后获取使用包创建的切片的地址,reflect
但我似乎无法为最终对象获得正确的类型。
硬编码版本如下所示:
val := new(StructA)
valSlice := make([]*StructA, desiredSize)
foo(&valSlice)
我拥有的reflect
版本如下所示:
inputType := reflect.TypeOf(&StructA{}) // This is a requirement
structType := inputType.Elem()
val := reflect.New(structType).Interface()
sliceType := reflect.SliceOf(inputType)
structSlice := reflect.MakeSlice(sliceType, desiredSize, desiredSize)
valSlice := structSlice.Interface()
在我尝试获取两个值的地址之前,这似乎有效:
foo(&val)
硬编码给了我这个&[<nil> <nil> <nil> <nil> <nil>]
type *[]*main.StructA
,而生成的给了我这个0xc00010a190
type *interface {}
。
这是对打印语句乱扔以供检查的问题的重现:https: //play.golang.org/p/ItKWS-PndTE
提前致谢!
解决方案
推荐阅读
- java - 布尔值始终返回 true
- ruby - 使用基于“命名空间”的应用程序时如何修复“未初始化的常量”
- java - 在后期阶段创建 Liquibase ChangeLog 和 LogLock 表,而不会使已执行的脚本失败
- python-3.x - 如何使用ezdxf在新的dxf文件中为图层编写注释
- c++ - 从 QML 文本输入更改 c++ 类属性
- python - 酸洗 QWidgets 和继承 QWidget 的类
- c++ - 如何替换多行 cpp 代码?
- javascript - 为什么我的 Vue 组件没有绑定样式?
- php - php问题用逗号将字符串转换为int
- html - ios safari 上的复选框问题