猿问

在 Go 中通过反射为结构成员赋值

我有一个带有成员 A、B、C 字符串的 struct v。使用反射,我可以获得字段的名称及其值:


typ := v.Type()

for i := 0; i < v.NumField(); i++ {

    // gets us a StructField

    fi := typ.Field(i)

    fieldname := fi.Name

    fmt.Println(fieldname)

    val := fmt.Sprintf("%v", v.Field(i).Interface())

 }

因为我有名字,并且可以得到值 OUT,我可以为字段分配新值吗?我想基本上做:


v.Field(fieldname).Interface() = "new value"

但这显然行不通。如果您只知道字段的名称,是否可以为结构赋值?


在实践中,我试图将值从 a 分配给map[string]string结构中的相应字段,其中结构和映射定义可能会随着时间的推移而扩展,并且映射可能包含比结构更多或更少的值。我考虑过用 JSON 来做,但这种方法让我有点冷淡,因为使用反射来“几乎”到达那里是多么容易!


慕标5832272
浏览 266回答 1
1回答
随时随地看视频慕课网APP

相关分类

Go
我要回答