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

时间:2019-07-11 22:07:56

标签: go reflection

我有一个这样的结构:

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

有没有办法做到这一点?

1 个答案:

答案 0 :(得分:1)

反射值不是addressable。通过创建指向该结构的指针的反射值来进行修复。

    if (((Rectangle) object).getFill().equals("C:\\Users\\shree\\IdeaProjects\\DOLP2\\src\\sample\\00.jpg"))
    {
        System.out.println("Image detected");
    }
    else
    {
        System.out.println("Not working");
    }                   

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

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

Run it on the Go Playground