range over interface{} 存储切片 [英] range over interface{} which stores a slice
问题描述
假设您有一个接受 t interface{}
的函数.如果确定 t
是一个切片,我如何在该切片上range
?
Given the scenario where you have a function which accepts t interface{}
. If it is determined that the t
is a slice, how do I range
over that slice?
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)
}
}
}
Go Playground 示例:http://play.golang.org/p/DNldAlNShB
Go Playground Example: http://play.golang.org/p/DNldAlNShB
推荐答案
嗯,我用了 reflect.ValueOf
然后如果它是一个切片你可以调用 Len()
和 Index()
在值上获取切片的 len
和索引处的元素.我认为您无法使用范围操作来执行此操作.
Well I used reflect.ValueOf
and then if it is a slice you can call Len()
and Index()
on the value to get the len
of the slice and element at an index. I don't think you will be able to use the range operate to do this.
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))
}
}
}
Go Playground 示例:http://play.golang.org/p/gQhCTiwPAq
Go Playground Example: http://play.golang.org/p/gQhCTiwPAq
这篇关于range over interface{} 存储切片的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!