我正在编写一个函数,该函数从数据库中检索任意数据,并返回包含结果的结构片段。数据结构由用户在ItemFactory中定义。然后,用户在工厂上实现创建空结构的方法:
func (t Example) GenerateEmptyItem() interface{} {
return &Example{}
}
我正在尝试对Example
的切片执行相同的操作。我需要能够使用返回的任何内容来调用诸如len()
之类的函数,同时保持其通用性,以允许其由“通用”函数返回。
我不能简单地拥有这样的东西,因为用于一片接口的基础数据分配与一系列示例不同:
func (t Country) GenerateEmptyItems() []interface{} {
return []Country{} //Error
}
是否可以使用指向切片的指针,例如&[]Example{}
并将其作为interface{}
传递,然后仍然可以将其用作切片?还是我要解决这个错误?记住,我在编译时不知道数据的类型,所以我不能简单地进行转换。
感谢您的帮助。让我知道是否可以澄清任何事情。
答案 0 :(得分:2)
您不能完全直接这样做。
您可以使用reflection,但这不是一个很好的解决方案。通常的方法是定义一个接口类型,让您以相同的方式与所有数据进行交互。 sort软件包就是一个很好的例子。