请教 Go 用反射修改结构体的值的问题

2021-01-14 16:53:21 +08:00
 jonathanchoo

如果是普通的结构体,遍历 numField 根据 Field(i).Name 修改就可以了

但是如果遇到嵌套结构体怎么办

例如

type A struct {
  field1 string
  ...
  B
}

type B struct {
  field2 string
}

如何修改修改 field2 的值呢?

1393 次点击
所在节点    Go 编程语言
2 条回复
notamail
2021-01-14 17:35:02 +08:00
1. 你这并不是嵌套结构体。。。
2. 这种结构可以考虑用 map 来处理
joesonw
2021-01-14 17:42:26 +08:00
1. 私有变量改不了的.
2. struct 也是修改不了, 要 *B


type A struct {
Field1 string
*B
}

type B struct {
Field2 string
}

func main() {
a := A{B: &B{Field2: "123"}}
println(a.B.Field2)
v := reflect.ValueOf(&a)
v.Elem().FieldByName("B").Elem().FieldByName("Field2").Set(reflect.ValueOf("456"))
println(a.B.Field2)
}



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

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/744960

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX