欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

golang 通过字符串动态调用对应结构体下的方法

程序员文章站 2022-03-04 15:51:45
golang 通过字符串动态调用对应结构体下的方法package mainimport ("fmt""reflect")type IRoute interface {test()test1()test2()}type Common struct {}func (c *Common) test() {fmt.Println("test")}func (c *Common) test1() {fmt.Println("test1")}func (...

golang 通过字符串动态调用对应结构体下的方法

package main import ( "fmt" "reflect" ) type IRoute interface { test() test1() test2() } type Common struct { } func (c *Common) test() { fmt.Println("test") } func (c *Common) test1() { fmt.Println("test1") } func (c *Common) test2() { fmt.Println("test2") } type Login struct { Common } func (l *Login) test() { fmt.Println("Login test ---------") } type Auth struct { Common } func (a *Auth) test() { fmt.Println("Auth test ------------") } func (a *Auth) test1() { fmt.Println("Auth test1 -----------") } func addroute(route IRoute) { route.test() route.test1() route.test2() } var RegisterMessage = make(map[string]interface{}) func init() { RegisterMessage["login"] = &Login{} RegisterMessage["auth"] = &Auth{} } func main() { msg := RegisterMessage["login"] t := reflect.TypeOf(msg).Elem() n := reflect.New(t).Interface().(IRoute) addroute(n) msg1 := RegisterMessage["auth"] t1 := reflect.TypeOf(msg1).Elem() n1 := reflect.New(t1).Interface().(IRoute) addroute(n1) } 

通过go反射机制,传入字符串找出对应的结构体并且调用方法,这样只需要在初始化RegisterMessage的时候注册对应结构体指针对象,之后调用的时候就可以根据字符串调用对应方法。

本文地址:https://blog.csdn.net/qq_15115793/article/details/107915667

相关标签: 技术 golang