【发布时间】:2022-01-05 11:45:12
【问题描述】:
我需要创建一个将任何类型数组作为参数的函数。
package main
import "fmt"
type flt func(interface{}) bool
func filter(sl []interface{}, f flt) (filtered []interface{}) {
// todo call flt to each element on array
return
}
func f1(interface{}) bool{
return true
}
func main() {
slice := []int{1, 2, 3, 4, 5, 7}
filter(slice, f1)
}
./prog.go:16:8: cannot use slice (type []int) as type []interface {} in argument to filter
我创建了这个question,但该解决方案不适用于数组。
编辑1。顺便说一句,您可能注意到了,但我正在尝试为任何数组创建一个“映射函数”,就像 JS array.filter()
【问题讨论】:
-
泛型将在下一个版本 1.18(下个月)中出现,然后您将能够传递任何切片并返回相同元素类型的切片。在那之前,您一直坚持将参数定义为
interface{}并使用反射来迭代其元素。不用说,它不如泛型解决方案。 -
您当然可以更有效地处理“一对”具体切片类型(使用类型断言或类型切换),但绝对不是所有切片类型。
-
在过滤功能中,只需将[]interface{}改为interface{}go.dev/play/p/1Hahj5OpBNK
标签: arrays function go types interface