【发布时间】:2014-11-07 10:11:59
【问题描述】:
我想创建一个函数,它接受一个映射或一个数组,并对其进行迭代,并在每个项目上调用一个函数,该函数知道如何处理它遇到的任何类型。
这是我第一次失败的尝试。目前,当我在实际用例中运行它时,它总是说“哦!”。
func DoTheThingToAllTheThings(data_interface interface{}) int {
var numThings int
switch data := data_interface.(type) {
case map[interface{}]interface{}:
numThings = len(data)
for index, item := range data {
DoTheThing(index, item)
}
case []interface{}:
numThings = len(data)
for index, item := range data {
DoTheThing(index, item)
}
default:
fmt.Println("uh oh!")
}
return numThings
}
数组或映射可能包含许多不同的东西,因此不能尝试匹配每个可能的输入。
另外说明,有没有办法在 Go 中迭代数组或映射而不知道它到底是什么?
【问题讨论】:
-
下面的基于
reflect的解决方案将起作用,但惯用的方法是尽可能在调用点写出循环。