范围覆盖存储切片的接口{}

鉴于你有一个接受t interface{}的函数的场景。 如果确定t是一个切片,我该如何在该切片上进行range ? 我不会在编译时知道传入的types,比如[]string[]int[]MyType

 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

那么我使用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)) } } } 

Go Playground示例: http : //play.golang.org/p/gQhCTiwPAq