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

新手问题:我想打印库的各种变量(这是正确的名称吗?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


三国纷争
浏览 240回答 1
1回答

MM们

反射是您可能想要使用的: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)}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go