小编典典

range over interface{} 存储切片

go

鉴于您有一个接受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)
        }
    }
}

阅读 39

收藏
2021-11-24

共1个答案

小编典典

好吧,我使用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))
        }
    }
}
2021-11-24