猿问

Golang 使用反射对结构体的字段进行一一变异

我有一个这样的结构:


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

有没有办法做到这一点?


温温酱
浏览 94回答 1
1回答

qq_花开花谢_0

反射值不可寻址。通过从指向结构的指针创建反射值来修复。reflectVal := reflect.ValueOf(&user).Elem()使用以下语句获取字段的类型。问题中的代码获取reflect.Value 的类型,而不是reflect.Value 中包含的值的类型。fieldType := reflectVal.Field(i).Type()
随时随地看视频慕课网APP

相关分类

Go
我要回答