假设您有一个接受t interface{}的函数.如果确定t是切片,如何在该切片上进行I 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)
        }
    }
}

go 操场示例: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))
        }
    }
}

Goplayground 示例:http://play.golang.org/p/gQhCTiwPAq

Go相关问答推荐

"k8s.io/apimachinery/pkg/runtime.对象(缺少方法DeepCopyBody)

难以为多个平台添加Go Bazel构建选项

为什么(编码器).EncodeElement忽略";,innerxml";标记?

Go SQLCMD比Windows本机版本慢吗?

Hugo错误:没有为此项目配置现有内容目录

正确使用pgtype的方法

显示GUI时后台处理功能

Go 是否提供了标准或事实上的方法来处理单个语句中的错误(即内联错误处理)?

Golang prometheus:有没有办法衡量出站请求的指标?

同一文件上的多个 Arrow CSV 阅读器返回 null

Gorm delete with clauses sqlmock 测试

无法使用 gocsv 读取引用字段

emersion/go-imap - imap.FetchRFC822:无效内存地址或零指针取消引用

Golang模板无法访问embedFS中的文件

使用 AppID 在 Windows 中启动应用程序并获取 pid

使用反射在 struct 内迭代切片 struct

在 Go 中将十六进制转换为带符号的 Int

有没有办法在一个 goroutine 返回后延迟后取消上下文?

GOLANG 如何使用 http.FileServer 从模板目录加载某个 html 文件

手动将 OpenTelemetry 上下文从 golang 提取到字符串中?