Golang動態(tài)調(diào)用方法小結(jié)
main.go
package main
import (
"lenu/call"
"reflect"
)
type FuncCollection map[string]reflect.Value
func main() {
_, _ = CallFunc("Hello", "執(zhí)行Hello方法")
_, _ = CallFunc("World", "執(zhí)行World方法")
}
func CallFunc(tableName string, args ... interface{}) (result []reflect.Value, err error) {
var router call.Routers
FuncMap := make(FuncCollection, 0)
rf := reflect.ValueOf(&router)
rft := rf.Type()
funcNum := rf.NumMethod()
for i := 0; i < funcNum; i ++ {
mName := rft.Method(i).Name
FuncMap[mName] = rf.Method(i)
}
parameter := make([]reflect.Value, len(args))
for k, arg := range args {
parameter[k] = reflect.ValueOf(arg)
}
result = FuncMap[tableName].Call(parameter)
return
}
package call:
router.go:
package call
type Routers struct {
}
hello.go
package call
import "log"
func (router *Routers) Hello(args ...interface{}) bool {
log.Println(args[0])
return true
}
world.go
package call
import "log"
func (router *Routers) World(args ...interface{}) bool {
log.Println(args[0])
return true
}
go run main.go會通過反射去調(diào)用Hello,World方法

到此這篇關(guān)于Golang動態(tài)調(diào)用方法小結(jié)的文章就介紹到這了,更多相關(guān)Golang動態(tài)調(diào)用內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
golang?防緩存擊穿singleflight的實(shí)現(xiàn)
本文主要介紹了golang?防緩存擊穿singleflight的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-08-08
Fedora14 Linux系統(tǒng)安裝Golang開發(fā)環(huán)境筆記
這篇文章主要介紹了Fedora14 Linux系統(tǒng)安裝Golang開發(fā)環(huán)境筆記,本文講解了2種安裝方法,需要的朋友可以參考下2014-10-10
Golang學(xué)習(xí)筆記之延遲函數(shù)(defer)的使用小結(jié)
GO語言實(shí)現(xiàn)簡單TCP服務(wù)的方法
Go處理JSON數(shù)據(jù)的實(shí)現(xiàn)
golang如何設(shè)置Header Content-type

