1. 程式人生 > >Go反射呼叫方法

Go反射呼叫方法

Go提供了一個很重要的特性就是反射機制,反射機制對應處理一些特殊的應用場景非常實用。下文是Go反射呼叫函式的程式碼片段。

type Test struct {}

func (t *Test)PrintInfo(i int , s string) string{
    fmt.Println("call method PrintInfo i", i, ",s :", s)
    return s +strconv.Itoa(i)
}

func (t *Test)ShowMsg() string {
    fmt.Println("\nshow msg input 'call reflect'"
) return "ShowMsg" } func callReflect(any interface{}, name string, args... interface{}) []reflect.Value{ inputs := make([]reflect.Value, len(args)) for i, _ := range args { inputs[i] = reflect.ValueOf(args[i]) } if v := reflect.ValueOf(any).MethodByName(name); v.String() == "<invalid Value>"
{ return nil }else { return v.Call(inputs) } } func callReflectMethod(){ fmt.Printf("\n callReflectMethod PrintInfo :%s", callReflect(&Test{}, "PrintInfo", 10, "TestMethod")[0].String()) fmt.Printf("\n callReflectMethod ShowMsg %s", callReflect(&Test{}, "ShowMsg"
)[0].String()) //<invalid Value> case callReflect(&Test{}, "ShowMs") if result := callReflect(&Test{}, "ShowMs"); result != nil { fmt.Printf("\n callReflectMethod ShowMs %s", result[0].String()) }else { fmt.Println("\n callReflectMethod ShowMs didn't run ") } fmt.Println("\n reflect all ") }

在main函式中呼叫函式callReflectMethod就可以執行上面程式碼片段了。

歡迎加入我的微信公眾號

歡迎加入我的微信公眾號