golang动态调用方法

package main

import (
    "fmt"
    "reflect"
)

type YourT1 struct {
}

func (y *YourT1) MethodBar() {
    fmt.Println("MethodBar called")
}

type YourT2 struct {
}

func (y *YourT2) MethodFoo(i int, oo string) {
    fmt.Println("MethodFoo called", i, oo)
}

func InvokeObjectMethod(object interface{}, methodName string, args ...interface{}) {
    inputs := make([]reflect.Value, len(args))
    for i, _ := range args {
        inputs[i] = reflect.ValueOf(args[i])
    }
    reflect.ValueOf(object).MethodByName(methodName).Call(inputs)
}

func main() {
    InvokeObjectMethod(new(YourT2), "MethodFoo", 10, "abc")
    InvokeObjectMethod(new(YourT1), "MethodBar")
}

 

本文来自:博客园

感谢作者:ziyouchutuwenwu

查看原文:golang动态调用方法

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。