2 回答
TA贡献1786条经验 获得超13个赞
正如 Rob Pike 在此线程中提到的
是否可以在 Go 类型开关中表达“任何映射”、“任何数组”或“任何切片”?
否 。静态类型必须是精确的。
空接口实际上是一种类型,而不是通配符。
您只能迭代特定类型的列表,例如具有已知功能的接口。
您可以看到一个示例,其中包含“我们可以在 go 中编写通用数组/切片重复数据删除吗? ”
即使使用反射,interface{}
如本线程所示,传递切片也容易出错(请参阅此示例)。
TA贡献1887条经验 获得超5个赞
您对 Map 的定义有些不完整。声明它的通常方法是使用 mapper 方法。您的示例至少可以通过这种方式实现
package main
import "fmt"
// Interface to specify something thet can be mapped.
type Mapable interface {
}
func main() {
list_1 := []int{1, 2, 3, 4}
list_2 := []string{"a", "b", "c", "d"}
Map(print, list_1)
Map(print, list_2)
}
func print(value Mapable){
fmt.Print(value)
}
// This function maps the every element for
// all []types of array.
func Map(mapper func(Mapable), list ... Mapable) {
for _, value := range list {
mapper(value)
}
}
它有效。需要说它有点无类型。因为不,Go 没有 Hindley-Milner 意义上的“泛型”
- 2 回答
- 0 关注
- 185 浏览
添加回答
举报