新手问题:我想打印库的各种变量(这是正确的名称吗?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)
}
- 1 回答
- 0 关注
- 239 浏览
添加回答
举报
0/150
提交
取消
