给定您具有接受功能的场景t interface{}。如果确定t是切片,我如何range在该切片上?
t interface{}
t
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) } } }
前往游乐场示例:http://play.golang.org/p/DNldAlNShB
好吧,我曾经使用过reflect.ValueOf,然后如果它是一个切片,则可以调用,Len()并Index()在该值上调用以len在索引处获取切片和元素的。我认为您将无法使用范围操作来做到这一点。
reflect.ValueOf
Len()
Index()
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)) } } }
前往游乐场示例:http : //play.golang.org/p/gQhCTiwPAq