【问题标题】:How to set struct field value in which is one of fields of another struct using reflect?如何使用反射设置另一个结构的字段之一的结构字段值?
【发布时间】:2021-11-01 10:47:35
【问题描述】:

我正在编写一个可以帮助我设置对象的任何字段值的工具,但是有一个问题。

我有两个结构 Player 和 Card:

type Player struct {
    Name string
    IDCard Card
}

type Card struct {
    ID string
}

有功能

func setVal(data interface{}, fieldPath []string, val string) {
    // ...
}

该函数要做的是将数据的特定字段值设置为val。 例如

p := Player{
    Name: "Tsuru",
    IDCard: Card{ID: "id"},
}

fieldPath_Name := []string{"Name"}
fieldPath_ID := []string{"IDCard", "ID"}

setVal(&p, fieldPath_Name, "Miku") // set p.Name to "Miku"
setVal(&p, fieldPath_ID, "newID")  // set p.IDCard.ID to "newID"

表示在对象p的字段IDCard中设置Name字段为“Miku”,ID为“newID”。

我的方法是使用golang reflect 根据fieldPath递归获取每个字段的值和类型。

现在name设置可以成功,但是如何完成ID设置呢? IDCard 是一个结构体,是 Player 的字段之一。

谢谢

【问题讨论】:

  • “我的方法是使用golang reflect 根据fieldPath递归获取每个字段的值和类型。” -- 那个方法在哪里?可以分享一下吗?

标签: go reflection


【解决方案1】:
rv := reflect.ValueOf(&p).Elem()
rv.FieldByName("IDCard").FieldByName("ID").SetString("newID")

https://play.golang.org/p/yab71JV_z0j

【讨论】:

  • 我的方法不是那么有效,但现在我有了一些想法,感谢你的代码:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-20
  • 1970-01-01
  • 1970-01-01
  • 2014-07-06
  • 1970-01-01
相关资源
最近更新 更多