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

将字符串数组转换为字段名称

将字符串数组转换为字段名称

Go
三国纷争 2021-12-13 11:06:12
新手问题:我想打印库的各种变量(这是正确的名称吗?reflect.TypeOf(servers)给出[]lib.Server)我想做这样的事情,但这显然行不通:servers, err := GetClient().GetServers() //call to external APIserverVariables := []string{}serverVariables = append(serverVariables, "Name")serverVariables = append(serverVariables, "IPAddress")for _, server := range servers {   for _,element := range serverVariables {     fmt.Println(server.element)   }}我已经可以做的是以下(但我想使用上述方法来做):servers, err := GetClient().GetServers() //call to external APIfor _, server := range servers {   fmt.Println(server.Name)   fmt.Println(server.IPAddress)}给出以下输出:ServerNameOne192.168.0.1ServerNameTwo192.168.0.2
查看完整描述

1 回答

?
MM们

TA贡献1886条经验 获得超2个赞

反射是您可能想要使用的:


for _, server := range servers {

    v := reflect.ValueOf(server)

    for _, element := range serverVariables {

        fmt.Println(v.FieldByName(element))

    }

}

您还应该将serverVariables初始化更改为serverVariables := []string{}


游乐场示例:https : //play.golang.org/p/s_kzIJ7-B7


在我看来,您有使用 Python 或 JavaScript 等动态语言的经验。Go 是经过编译和强类型的。除了反射速度较慢之外,使用它时,编译器无法帮助您找到代码中的基本错误,最重要的是您丢失了访问变量的类型。有关http://blog.golang.org/laws-of-reflection 的更多信息


因此,我强烈建议您保留当前的方法:


for _, server := range servers {

   fmt.Println(server.Name)

   fmt.Println(server.IPAddress)

}


查看完整回答
反对 回复 2021-12-13
  • 1 回答
  • 0 关注
  • 239 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号