代码编程中,用方法调用匹配名字的函数,非常有效
    利用go的反射机制可以实现

    1. import (
    2. "errors"
    3. "fmt"
    4. "reflect"
    5. )
    6. func foor() {
    7. fmt.Println("Start->foor()")
    8. }
    9. func say(number int) {
    10. fmt.Printf("This text is %d", number)
    11. }
    12. func Call(m map[string]interface{}, name string, params ...interface{}) (result []reflect.Value, err error) {
    13. f := reflect.ValueOf(m[name])
    14. if len(params) != f.Type().NumIn() {
    15. err = errors.New("The number of params is not adapted.")
    16. return
    17. }
    18. in := make([]reflect.Value, len(params))
    19. for k, param := range params {
    20. in[k] = reflect.ValueOf(param)
    21. }
    22. result = f.Call(in)
    23. return
    24. }
    25. func main() {
    26. fmt.Println("Start Main func()")
    27. // map 直接调用函数
    28. funcs := map[string]func(){"foor": foor}
    29. funcs["foor"]()
    30. // 反射
    31. xfuncs := map[string]interface{}{"say": say}
    32. Call(xfuncs, "say", 123)
    33. }
    34. // 输出
    35. // Start->foor()
    36. // This text is 123