在Go中传递任意切片

时间:2018-12-03 23:23:13

标签: pointers go slice

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

func (t Example) GenerateEmptyItem() interface{} {
    return &Example{}
}

我正在尝试对Example的切片执行相同的操作。我需要能够使用返回的任何内容来调用诸如len()之类的函数,同时保持其通用性,以允许其由“通用”函数返回。

我不能简单地拥有这样的东西,因为用于一片接口的基础数据分配与一系列示例不同:

func (t Country) GenerateEmptyItems() []interface{} {
    return []Country{} //Error
}

是否可以使用指向切片的指针,例如&[]Example{}并将其作为interface{}传递,然后仍然可以将其用作切片?还是我要解决这个错误?记住,我在编译时不知道数据的类型,所以我不能简单地进行转换。

感谢您的帮助。让我知道是否可以澄清任何事情。

1 个答案:

答案 0 :(得分:2)

您不能完全直接这样做。

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