有一个统一处理数据的需求,用到了反射。在main中测试是可以的,测试代码如下:
<pre><code>
type MyStruct struct {
N int32
T string
}
mutable := reflect.ValueOf(&n).Elem()
mutable.FieldByName("N").SetInt(7)
</pre></code>
///////////////////////////但是当用函数传递的方式处理就会遇到这个报错,尝试了半天都不知道应该怎么处理,请教各位了。急
<pre><code>
func testLL(v interface{}) {
mutable := reflect.ValueOf(&v).Elem()
mutable.FieldByName("N").SetInt(7)
}
</pre></code>
当调用`testLL(MyStruct{})`时会报以下错误,似乎当作接口函数了
该怎么写呢?
`panic: reflect: call of reflect.Value.FieldByName on interface Value`
你应该这样定义,也就是v不要取地址
``` go
func testLL(v interface{}) {
mutable := reflect.ValueOf(v).Elem()
mutable.FieldByName("N").SetInt(7)
}
```
这样调用
``` go
testLL(&MyStruct{})
```
#5
更多评论