为了账号安全,请及时绑定邮箱和手机立即绑定

如何确定接口切片中的值类型{}

如何确定接口切片中的值类型{}

Go
慕村9548890 2022-05-23 15:03:41
考虑以下代码:package mainimport (    "fmt"    "reflect")func f(v interface{}) {    fmt.Println(reflect.TypeOf(v).Elem())    fmt.Println(reflect.ValueOf(v))}func main() {    var aux []interface{}    aux = make([]interface{}, 2)    aux[0] = "foo"    aux[1] = "bar"    f(aux)}输出是:interface {}[foo bar]如何确定 interface{} 切片中包含的元素的类型,在这个特定示例中,我需要在我的函数中知道f该 interface{} 切片包含string值。我的用例是,使用反射,我试图根据我的 interface{} 参数切片所持有的值的类型来设置一个结构字段。
查看完整描述

1 回答

?
素胚勾勒不出你

TA贡献1827条经验 获得超9个赞

你传入的值是 type []interface{},所以元素类型是interface{}. 如果您想查看元素类型是什么,则需要单独思考:


func f(i interface{}) {

    v := reflect.ValueOf(i)

    for i := 0; i < v.Len(); i++ {

        e := v.Index(i)

        fmt.Println(e.Elem().Type())

        fmt.Println(e)

    }

}

如果您知道您将始终拥有一个[]interface{},请将其用作参数类型以使迭代和类型检查更容易:


func f(things []interface{}) {

    for _, thing := range things {

        v := reflect.ValueOf(thing)

        fmt.Println(v.Type())

        fmt.Println(v)

    }

}


查看完整回答
反对 回复 2022-05-23
  • 1 回答
  • 0 关注
  • 130 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信