首页 > 解决方案 > 在 Go 中传递任意切片

问题描述

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

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

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

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

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

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

我很感激任何帮助。让我知道我是否可以澄清任何事情。

标签: pointersgoslice

解决方案


你不能直接这样做。

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


推荐阅读