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的时候注册对应结构体指针对象,之后调用的时候就可以根据字符串调用对应方法。
本文地址:http://www.51sjk.com/Upload/Articles/1/0/251/251433_20210626000935481.jpg