首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >将字符串数组转换为字段名

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

Stack Overflow用户
提问于 2016-02-12 12:42:00
回答 1查看 59关注 0票数 0

新手问题:我想打印库中的各种变量(这是正确的名称吗?reflect.TypeOf(servers)给出了[]lib.Server)

我想做这样的事,但这显然行不通:

代码语言:javascript
运行
复制
servers, err := GetClient().GetServers() //call to external API

serverVariables := []string{}
serverVariables = append(serverVariables, "Name")
serverVariables = append(serverVariables, "IPAddress")

for _, server := range servers {
   for _,element := range serverVariables {
     fmt.Println(server.element)
   }
}

我已经可以做的是以下几点(但我想使用上面的方法):

代码语言:javascript
运行
复制
servers, err := GetClient().GetServers() //call to external API

for _, server := range servers {
   fmt.Println(server.Name)
   fmt.Println(server.IPAddress)
}

给出以下输出:

代码语言:javascript
运行
复制
ServerNameOne
192.168.0.1
ServerNameTwo
192.168.0.2
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-02-12 13:23:22

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

代码语言:javascript
运行
复制
for _, server := range servers {
    v := reflect.ValueOf(server)
    for _, element := range serverVariables {
        fmt.Println(v.FieldByName(element))
    }
}

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

操场示例:kzIJ7-B7

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

因此,我强烈建议你保持目前的做法:

代码语言:javascript
运行
复制
for _, server := range servers {
   fmt.Println(server.Name)
   fmt.Println(server.IPAddress)
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35362948

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档