基于反射确定调用方法
轮寻map确定方法调用
附带返回值
从而实现 基于反射的类操作和处理方法
如果类A则方法A
如果类B则方法B
…
相对于switch而言,我们可以把map m作为全局变量,实现变量注入
package main
import (
"fmt"
"reflect"
)
func goFunc2(f func(interface{}), i interface{}) {
f(i)
}
func DoString(i interface{}) string {
return "str " + i.(string)
}
func DoOthers(i interface{}) {
fmt.Println("default")
}
func f2(i interface{}) {
var m map[reflect.Type]func(interface{}) string
m = make(map[reflect.Type]func(interface{}) string)
m[reflect.TypeOf("")] = DoString
for k, v := range m {
if k == reflect.TypeOf(i) {
fmt.Println(v(i))
}
}
fmt.Println("f2 done", i)
}
func main() {
goFunc2(f2, 100)
goFunc2(f2, "abc")
}
go run main.go
f2 done 100
str abc
f2 done abc