Pointers 在Go中传递任意切片

Pointers 在Go中传递任意切片,pointers,go,slice,Pointers,Go,Slice,我正在编写一个函数,它从数据库中检索任意数据,并返回一个包含结果的结构片。数据结构由用户在ItemFactory中定义。然后,用户在工厂上实现创建空结构的方法: func (t Example) GenerateEmptyItem() interface{} { return &Example{} } 我正在尝试对示例的片段执行相同的操作。我需要能够使用返回的任何内容来调用函数,例如len(),同时保持它的泛型,以便允许它由“泛型”函数返回 我不能简单地拥有这样的东西,因为接口

我正在编写一个函数,它从数据库中检索任意数据,并返回一个包含结果的结构片。数据结构由用户在ItemFactory中定义。然后,用户在工厂上实现创建空结构的方法:

func (t Example) GenerateEmptyItem() interface{} {
    return &Example{}
}
我正在尝试对
示例
的片段执行相同的操作。我需要能够使用返回的任何内容来调用函数,例如
len()
,同时保持它的泛型,以便允许它由“泛型”函数返回

我不能简单地拥有这样的东西,因为接口片的底层数据分配不同于示例片:

func (t Country) GenerateEmptyItems() []interface{} {
    return []Country{} //Error
}
是否可以使用指向切片的指针,例如
&[]示例{}
并将其作为
接口{}
传递,然后仍然可以将其作为切片使用?或者我是不是搞错了?记住,我不知道编译时数据的类型,所以我不能简单地强制转换


谢谢你的帮助。如果我能澄清什么,请告诉我。

你不能直接这样做


您可以使用,但是这不是一个很好的解决方案。通常的方法是定义一个接口类型,允许您以相同的方式与所有数据交互。包就是一个很好的例子。

指针不会改变任何东西,它只是一个指针。如果需要在不知道类型的情况下对数据进行操作,则需要使用反射。可能只需要使用反射,因为我不希望用户定义太多。如果
items
是指向接口片段的指针,我可以使用
I:=reflect.ValueOf(items).Elem().Interface()获取底层片段。然而,
i
在编译时仍然是一个接口。你知道我怎么能把它解释成一个切片吗?我只需要做一个reflect
MakeSlice()
并将元素复制过来就行了吗?我可能会被你的问题弄糊涂了。您可以使用reflect检查
i
,并通过