新手问题:
我想打印一个库的各种变量(正确的名称是什么?reflect.TypeOf(servers)
给出了[]lib.Server
)
我想做这样的事情,但这显然不起作用:
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)
}
}
我已经可以做的是以下内容(但我希望使用上述方法):
servers, err := GetClient().GetServers() //call to external API
for _, server := range servers {
fmt.Println(server.Name)
fmt.Println(server.IPAddress)
}
给出以下输出:
ServerNameOne
192.168.0.1
ServerNameTwo
192.168.0.2
答案 0 :(得分:0)
您可能想要使用反思:
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)
}