登录
首页 >  Golang >  Go问答

接口内反射阵列

来源:stackoverflow

时间:2024-04-23 13:21:31 484浏览 收藏

大家好,今天本人给大家带来文章《接口内反射阵列》,文中内容主要涉及到,如果你对Golang方面的知识点感兴趣,那就请各位朋友继续看下去吧~希望能真正帮到你们,谢谢!

问题内容

我正在尝试通过反射访问接口内的数组。

在其他字段中,我还有一个字符串数组:

type configuration struct {
    ...
    sysvars []string
}

我可以像这样访问字段sysvars

elem := reflect.valueof(conf).elem()
sysvarsinterface := elem.fieldbyname("sysvars").interface()

此时,当使用 goland 的调试器时,我可以看到 sysvarsinterface 是一个具有我期望的两个值的接口。既然它是一个数组,我想我需要将它视为接口并再次反映它?所以它看起来像这样:

sysvarsvalue := reflect.valueof(&sysvarsinterface)
sysvarselem := sysvarsvalue.elem()

但迭代失败:

for i:=0; i< sysvarselem.numfield(); i++ {
    vname := sysvarselem.type().field(i).name
    fmt.println(vname)
}

说:

panic: reflect: call of reflect.Value.NumField on interface Value

有什么想法我做错了什么吗?

我用这个作为参考


解决方案


不需要双重反射,你可以像这样迭代sysvars:

p := &Configuration{
SysVars :[]string{"a","b","c"},
}

s:= reflect.ValueOf(p).Elem().FieldByName("SysVars")
for i:=0 ; i< s.Len() ; i++ {
   fmt.Println(s.Index(i).String())
}

文中关于的知识介绍,希望对你的学习有所帮助!若是受益匪浅,那就动动鼠标收藏这篇《接口内反射阵列》文章吧,也可关注golang学习网公众号了解相关技术文章。

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>