新手问题:我想打印库中的各种变量(这是正确的名称吗?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
发布于 2016-02-12 13:23:22
反射是您可能想要使用的:
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的更多信息
因此,我强烈建议你保持目前的做法:
for _, server := range servers {
fmt.Println(server.Name)
fmt.Println(server.IPAddress)
}
https://stackoverflow.com/questions/35362948
复制相似问题