首页 > 解决方案 > 如何使用反射包在 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,而生成的给了我这个0xc00010a190type *interface {}

这是对打印语句乱扔以供检查的问题的重现:https: //play.golang.org/p/ItKWS-PndTE

提前致谢!

标签: goreflection

解决方案


推荐阅读