Go 是否创建未知类型的切片?

Go 是否创建未知类型的切片?,go,couchbase,Go,Couchbase,我正在尝试使用此函数(从)获取多个值 问题是我不知道如何创建rv切片,因为我不知道它在我的函数中的类型,也不知道它会有多大,所以我不能通过索引访问rv切片,对吗 我希望尽可能的通用,因此根据rv结构创建函数并不是真正的最佳选择,函数只返回[]字节 甚至可以在go中执行我想要的操作吗?考虑到需要一个接口,您需要将对象放入[]接口,如wiki页面中所述“” 这意味着你已经有了一片“某物”,并且知道它的大小 或者,由于您希望“围绕get函数构建一个函数”,您可以使用相同的签名,并使用简单的接口{}而不

我正在尝试使用此函数(从)获取多个值

问题是我不知道如何创建rv切片,因为我不知道它在我的函数中的类型,也不知道它会有多大,所以我不能通过索引访问
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()))