一尘不染

接口{}的范围,它存储一个切片

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)
        }
    }
}

前往游乐场示例:http//play.golang.org/p/DNldAlNShB


阅读 184

收藏
2020-07-02

共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))
        }
    }
}

前往游乐场示例:http :
//play.golang.org/p/gQhCTiwPAq

2020-07-02