反射调用结构体方法
概念说明
反射不仅能查看字段,也可以按方法名调用方法。
常见做法是用 MethodByName 找到方法,再用 Call 传入参数。
这种方式会牺牲编译期检查。
只有在框架、插件、动态分发等场景下才更适合使用。
语法/规则
- 使用
reflect.ValueOf(value).MethodByName("方法名")查找方法。 - 方法不存在时返回无效值,可以用
IsValid()判断。 Call的参数类型是[]reflect.Value。Call的返回值也是[]reflect.Value。- 只能通过反射直接找到可导出方法。
调用方法示例
| |
输出结果:
| |
常见错误
- 方法名写错后不检查
IsValid(),直接调用导致 panic。 Call参数数量或类型不匹配,运行时才报错。- 试图调用未导出方法,反射无法按普通方式直接调用。
- 能用普通方法调用时仍使用反射,降低可读性和类型安全。