如何从变量分配结构的字段名称

时间:2018-07-09 08:08:47

标签: go dynamic struct

我是golang的新手,正在从php迁移到golang。

我正在尝试执行以下操作,在此我希望从变量test中分配字段名age。在golang中有可能吗?

在php中,我们提供了$$ test之类的规定,在golang中也看起来类似。

 package main
 import "fmt"
 // This `person` struct type has `name` and `age` fields.
 type person struct {
   name string
   age  int
 }

 func main() {

   var test = "age"     
   fmt.Println(person{name: "Alice",test: 30})

 } 

这只是复制我的用例的示例代码。

1 个答案:

答案 0 :(得分:5)

您可以按照偏好的大致顺序选择三个选项:

1)if / switch语句:

var p = &person{}
if key == "age" {
    p.age = value
}

2)使用映射代替结构:

var p = map[string]interface{}
p[key] = value

3)使用反射。有关详细信息,请参见this question,但通常应避免反射。它很慢,而且很惯用,并且仅适用于导出的字段(您的示例使用未导出的字段,正如所写的那样,无论如何都不适合进行反射)。