如何在golang中为泛型参数编写func

sub*_*ngh 8 arrays function go

我正在尝试编写一个函数Map,以便它可以处理所有类型的数组.

// Interface to specify generic type of array.
type Iterable interface {
}

func main() {
    list_1 := []int{1, 2, 3, 4}
    list_2 := []uint8{'a', 'b', 'c', 'd'}
    Map(list_1)
    Map(list_2)
}

// This function prints the every element for
// all []types of array.
func Map(list Iterable) {
    for _, value := range list {
        fmt.Print(value)
    }
}
Run Code Online (Sandbox Code Playgroud)

但它会抛出编译时错误.

19: cannot range over list (type Iterable)
Run Code Online (Sandbox Code Playgroud)

错误是正确的,因为range需要数组,指向数组,切片,字符串,映射或通道的指针允许接收操作,此处类型为Iterable.我认为我面临的问题是,将参数类型转换Iterable为数组类型.请建议,我如何使用我的函数来处理通用数组.

Von*_*onC 6

正如Rob Pike在这个帖子中提到的那样

是否可以在Go类型开关中表达"任何地图","任何数组"或"任何切片"?

不可以 .静态类型必须准确.
空接口实际上是一种类型,而不是通配符.

您只能迭代特定类型的列表,例如具有已知函数的接口.
您可以看到一个示例" 我们可以在go中编写通用阵列/片重复数据删除吗? "

即使使用反射,也可以传递切片interface{},如此线程所示,容易出错(参见本示例).