dpitqpax07626 2018-09-24 15:34
浏览 47
已采纳

在结构方法内部使用反射调用结构的方法

How can I use reflect to call method of struct, inside a struct method? e.g:

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"
}

The following code will print <invalid reflect.Value> even though fake exists.

Thanks in advance! :)

  • 写回答

2条回答 默认 最新

  • doubi4340 2018-09-24 16:04
    关注

    The problems are that:

    • &t is passed to ValueOf instead of t
    • the fake method is not exported

    Here is a working example:

    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"
    }
    

    Outputs

    0xec820

    Try it yourself

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 powerbuilder中的datawindow数据整合到新的DataWindow
  • ¥20 有人知道这种图怎么画吗?
  • ¥15 pyqt6如何引用qrc文件加载里面的的资源
  • ¥15 安卓JNI项目使用lua上的问题
  • ¥20 RL+GNN解决人员排班问题时梯度消失
  • ¥60 要数控稳压电源测试数据
  • ¥15 能帮我写下这个编程吗
  • ¥15 ikuai客户端l2tp协议链接报终止15信号和无法将p.p.p6转换为我的l2tp线路
  • ¥15 phython读取excel表格报错 ^7个 SyntaxError: invalid syntax 语句报错
  • ¥20 @microsoft/fetch-event-source 流式响应问题