【发布时间】:2021-10-20 20:19:33
【问题描述】:
我在设置一个 reflect.Value 时遇到了一些麻烦,它是一个不同的字符串。
在关注GetValue() 时返回reflect.Value
val, err := exp.GetFact(t.(*api.Event_Set).Set.Key).GetValue()
if err != nil {
ref := reflect.Indirect(val)
ref.SetString(t.(*api.Event_Set).Set.Value)
}
点击 SetString 时会引发恐慌:
panic: reflect: reflect.Value.SetString using unaddressable value
我尝试了不同的语法,即不使用 Indirect,使用 Elem() 等。如何正确更改字符串的值?
【问题讨论】:
-
val的类型是什么? -
哦,是的,我上面提到了GetValue返回reflect.Value。包含的值是一个基本字符串。
-
不,我们的意思是
valreflect.Value中包含的值是什么?错误是你有一个不可寻址的值,你不能在事后使它成为可寻址的。 -
如果只是
string而不是*string,我认为这将是您问题的根源。 -
如果您提供对相关库的引用,那么我们可以提供更具体的答案(通过查看源代码)。一般来说,如果给
reflect.Value的值不是以指针开头的,则没有有意义的方法将其转换为指针,因为与原始“真实”值的所有关联都已丢失。 (顺便说一句,试试val.Type().String())
标签: go