我有一个这样的结构:
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
有没有办法做到这一点?
答案 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()