gpt4 book ai didi

go - 通过反射将接口(interface)的值设置为指向 struc 类型指针的 struct 字段

转载 作者:IT王子 更新时间:2023-10-29 02:10:06 26 4
gpt4 key购买 nike

我正在尝试设置 struct.field = &otherStruct。但是,我不得不使用反射,而otherStruct是interface{}类型的。

我得到的错误是:

reflect.Set: value of type main.StructB is not assignable to type *main.StructB

结构是已知的。 otherStruct 的(实际)类型未知,但可以保证赋值是安全的(结构类型相同)。

代码:

type StrucA struct {
Field *StrucB
}

type StrucB struct {}

func main() {
a := StrucA{}
var b interface{} = StrucB{}
//above is set

// Target: Set a.Field = &b
reflect.ValueOf(&a).Elem().FieldByName("Field").Set(reflect.ValueOf(b)) // reflect.Set: value of type main.StrucB is not assignable to type *main.StrucB
}

Playground : https://play.golang.org/p/LR_RgfBzsxa

我已经测试了很多不同的东西,但我无法解决它。

最佳答案

您首先需要分配一个指向b 类型的指针,以便在某处复制值。获得指针值后,您可以将其设置为 a 中的 Field:

field := reflect.New(reflect.TypeOf(b))
field.Elem().Set(reflect.ValueOf(b))
reflect.ValueOf(&a).Elem().FieldByName("Field").Set(field)

https://play.golang.org/p/6-GNSEq0tw3

关于go - 通过反射将接口(interface)的值设置为指向 struc 类型指针的 struct 字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49324312/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com