gpt4 book ai didi

Golang 使用反射一个一个地改变一个结构的字段

转载 作者:数据小太阳 更新时间:2023-10-29 03:08:25 28 4
gpt4 key购买 nike

我有一个这样的结构:

type User struct {
Name string
UID int
Bio string
}

我有一个给定的实例化结构,我想遍历该对象中的字段并逐个修改它们。

这是我目前的情况

user := User{
Name: "Test",
UID: 1,
Bio: "Test bio",
}

reflectVal := reflect.ValueOf(user)
numFields := reflectVal.NumField()

for i := 0; i < numFields; i++ {
fieldType := reflect.TypeOf(reflectVal.Field(i))
reflectVal.Field(i).Set(reflect.Zero(fieldType))
...
}

但是我收到了这个错误:

panic: reflect: reflect.Value.Set using unaddressable value

有办法吗?

最佳答案

反射(reflect)值不是addressable .通过从指向结构的指针创建反射值来修复。

reflectVal := reflect.ValueOf(&user).Elem()

使用以下语句获取字段的类型。问题中的代码获取 reflect.Value 的类型,而不是 reflect.Value 中包含的值的类型。

fieldType := reflectVal.Field(i).Type()

Run it on the Go Playground .

关于Golang 使用反射一个一个地改变一个结构的字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56997889/

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