Go 是否创建未知类型的切片?
我正在尝试使用此函数(从)获取多个值 问题是我不知道如何创建rv切片,因为我不知道它在我的函数中的类型,也不知道它会有多大,所以我不能通过索引访问Go 是否创建未知类型的切片?,go,couchbase,Go,Couchbase,我正在尝试使用此函数(从)获取多个值 问题是我不知道如何创建rv切片,因为我不知道它在我的函数中的类型,也不知道它会有多大,所以我不能通过索引访问rv切片,对吗 我希望尽可能的通用,因此根据rv结构创建函数并不是真正的最佳选择,函数只返回[]字节 甚至可以在go中执行我想要的操作吗?考虑到需要一个接口,您需要将对象放入[]接口,如wiki页面中所述“” 这意味着你已经有了一片“某物”,并且知道它的大小 或者,由于您希望“围绕get函数构建一个函数”,您可以使用相同的签名,并使用简单的接口{}而不
rv
切片,对吗
我希望尽可能的通用,因此根据rv
结构创建函数并不是真正的最佳选择,函数只返回[]字节
甚至可以在go中执行我想要的操作吗?考虑到需要一个接口,您需要将对象放入[]接口,如wiki页面中所述“”
这意味着你已经有了一片“某物”,并且知道它的大小
或者,由于您希望“围绕get
函数构建一个函数”,您可以使用相同的签名,并使用简单的接口{}
而不是[]接口
,您可以使用reflect
包检查类型信息。如果我们有一个函数,它有一个参数rv interface{}
,我们希望在其中传递一个指向切片的指针,那么我们可以创建一个引用该切片的reflect.Value
:
slice := reflect.ValueOf(rv).Elem()
我们可以按如下方式重新初始化切片:
slice.Set(reflect.MakeSlice(slice.Type(), length, capacity))
我们可以通过以下方法确定此切片的元素类型:
elemType := slice.Type().Elem()
然后创建另一个reflect.Value
,该值表示指向该类型的新分配实例的指针:
v := reflect.New(elemType)
现在可以将v.Interface()
传递给像json.Unmarshal
这样的函数。填充后,可以将其附加到切片:
slice.Set(reflect.Append(slice, v.Elem()))
有关将JSON文档片段解码为任意片段类型的完整示例,请参见您是说片段通过rv
参数传递到此函数中吗?不,我正试图围绕get
函数构建一个函数,因此我需要一个“rv片段”,以便一次发送一个rv,通过引用。为什么不创建一个接口{}的切片呢?
v := reflect.New(elemType)
slice.Set(reflect.Append(slice, v.Elem()))