我是golang的新手,正在从php迁移到golang。
我正在尝试做下面的事情,我想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})
}
Run Code Online (Sandbox Code Playgroud)
这只是复制我的用例的示例代码。
您有三种选择,按优先顺序排列:
1)if / switch语句:
var p = &person{}
if key == "age" {
p.age = value
}
Run Code Online (Sandbox Code Playgroud)
2)使用映射代替结构:
var p = map[string]interface{}
p[key] = value
Run Code Online (Sandbox Code Playgroud)
3)使用反射。有关详细信息,请参见此问题,但通常应避免反思。它很慢,而且很惯用,并且仅适用于导出的字段(您的示例使用未导出的字段,正如所写的那样,无论如何都不适合进行反射)。