go - 使用反射在struct方法内部调用struct的方法
问题描述
如何在结构方法中使用反射来调用结构的方法?例如:
package main
import "fmt"
import "reflect"
type T struct{}
func (t *T) New() {
value := getDynamicValue()
method := reflect.ValueOf(&t).MethodByName(value)
fmt.Println(method)
}
func (t *T) fake() {
fmt.Println("Fake!")
}
func main() {
var t T
t.New()
}
func getDynamicValue() string {
return "fake"
}
<invalid reflect.Value>
即使fake
存在,以下代码也会打印。
提前致谢!:)
解决方案
问题是:
&t
被传递给ValueOf
而不是t
- 该
fake
方法未导出
这是一个工作示例:
package main
import "fmt"
import "reflect"
type T struct{}
func (t *T) New() {
value := getDynamicValue()
method := reflect.ValueOf(t).MethodByName(value)
fmt.Println(method)
}
func (t *T) Method() {
fmt.Println("Hello world!")
}
func main() {
var t T
t.New()
}
func getDynamicValue() string {
return "Method"
}
输出
0xec820
推荐阅读
- post - Python:运行带有错误消息的 POST 请求
- sql - 如何(取消)将多个指标转换为单个列?
- python - 'Pyqt5' 和 'multiprocessing' 不绘制图形
- javascript - 编辑一组相互触发的组合框
- r - 如何根据 Excel 电子表格中重复标题的值在 R 中创建新列?
- advanced-custom-fields - 带有 ACF 的 Elementor 中的条件文本
- macos - 查找在 OSX 上找不到的 util
- sql - 在不使用文字的情况下向时间戳添加间隔
- rest - 使用 C# REST API 从 TFS 获取用户身份
- r - R错误:替换长度为零 - 需要帮助