千家信息网

Golang动态调用方法是什么

发表于:2025-01-17 作者:千家信息网编辑
千家信息网最后更新 2025年01月17日,Golang动态调用方法是什么,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。main.gopackage main im
千家信息网最后更新 2025年01月17日Golang动态调用方法是什么

Golang动态调用方法是什么,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。

main.go

package main import ( "lenu/call" "reflect")  type FuncCollection map[string]reflect.Value func main() { _, _ = CallFunc("Hello", "执行Hello方法") _, _ = CallFunc("World", "执行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会通过反射去调用Hello,World方法

看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注行业资讯频道,感谢您对的支持。

0