假设您有一个接受 t interface{}
的函数。如果确定 t
是一个 slice,我如何在该 slice 上 range
?
func main() {
data := []string{"one","two","three"}
test(data)
moredata := []int{1,2,3}
test(data)
}
func test(t interface{}) {
switch reflect.TypeOf(t).Kind() {
case reflect.Slice:
// how do I iterate here?
for _,value := range t {
fmt.Println(value)
}
}
}
去 Playground 示例:http://play.golang.org/p/DNldAlNShB
最佳答案
好吧,我使用了 reflect.ValueOf
,然后如果它是一个 slice ,您可以在值上调用 Len()
和 Index()
在索引处获取 slice 和元素的 len
。我认为您无法使用范围操作来执行此操作。
package main
import "fmt"
import "reflect"
func main() {
data := []string{"one","two","three"}
test(data)
moredata := []int{1,2,3}
test(moredata)
}
func test(t interface{}) {
switch reflect.TypeOf(t).Kind() {
case reflect.Slice:
s := reflect.ValueOf(t)
for i := 0; i < s.Len(); i++ {
fmt.Println(s.Index(i))
}
}
}
去 Playground 示例:http://play.golang.org/p/gQhCTiwPAq
关于go - 存储 slice 的接口(interface){}上的范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14025833/