鉴于您有一个接受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) } } }
好吧,我使用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)) } } }