我希望将结构体指针传递给期望接口{}的函数。然后通过反射获取结构体成员的指针,然后使用该指针修改它。我已经阅读了很多问答并尝试了很多变化,但仍然无法使其正常工作。
让我们考虑下面的例子:
让我们考虑下面的例子:
type Robot struct {
Id int
}
f := func(i interface {}) {
v := reflect.ValueOf(i).Elem().FieldByName("Id")
ptr := v.Addr().Pointer()
*ptr = 100
//^ it needs to me for functions expecting the pointer: Scan(&pointerToValue)
}
robot := &Robot{}
f(robot)
println(robot.Id) //I want to get here 100
我认为问题在于不太理解反射包中 Addr() 和 Pointer() 方法的实际作用。
v.Addr().Interface().(*int)
。你可以分享一下我在哪里可以掌握这种知识吗? - Timur Fayzrakhmanovv.Addr().Interface().(*int)
。 - Charlie Tumahaiint
字段替换为接口类型的示例:https://play.golang.org/p/AMhp4KFv9C。它可以正常工作。 - Charlie Tumahai