作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我写的代码根据其类型填充数据结构。我需要调用嵌套的struct函数(如果存在)。
为什么我在字段正确的情况下得到零值寻找函数?
type (
SomeData struct {
Val NestedType
}
NestedType struct {
V1 string
}
)
func (t *NestedType) FillData(v int) {
t.V1 = fmt.Sprintf("Here is %v", v)
}
func main() {
i := SomeData{}
reflect.ValueOf(&i.Val).MethodByName("FillData").Call([]reflect.Value{reflect.ValueOf(555)})
fmt.Println(i) /// {{I hate 555}}
// BUT!
v := 666
newObj := reflect.New(reflect.TypeOf(SomeData{}))
fVal := newObj.Elem().FieldByName("Val")
fmt.Println( "fVal.NumField():", fVal.NumField()) //fVal.NumField(): 1
f := fVal.MethodByName("FillData")
f.Call([]reflect.Value{reflect.ValueOf(v)}) //panic: reflect: call of reflect.Value.Call on zero Value
}
最佳答案
该方法在指针接收器上。值fVal
是NestedType
。调用Value.Addr以获得*NestedType
:
f := fVal.Addr().MethodByName("FillData")
关于go - Golang反射MethodByName(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61047253/
我正在使用反射作为一个快速而肮脏的脚本处理程序,但我无法弄清楚错误检查 如何检查 MethodByName 是否找到了有效方法? 文档说零值 - 什么是零值? 有人能帮忙吗? https://play
反射问题,使用 MethodByName 代码: package main import ( "reflect" "fmt" ) type test struct {} var ser
我是一名优秀的程序员,十分优秀!