<2> go -反射-函数map化

原创 2015年11月18日 23:04:01

代码编程中,用方法调用匹配名字的函数,非常有效

利用go的反射机制可以实现


import (
    "errors"
    "fmt"
    "reflect"
)

func foor() {
    fmt.Println("Start->foor()")
}

func say(number int) {
    fmt.Printf("This text is %d", number)
}

func Call(m map[string]interface{}, name string, params ...interface{}) (result []reflect.Value, err error) {
    f := reflect.ValueOf(m[name])
    if len(params) != f.Type().NumIn() {
        err = errors.New("The number of params is not adapted.")
        return
    }
    in := make([]reflect.Value, len(params))
    for k, param := range params {
        in[k] = reflect.ValueOf(param)
    }
    result = f.Call(in)
    return
}

func main() {
    fmt.Println("Start Main func()")
    // map 直接调用函数
    funcs := map[string]func(){"foor": foor}
    funcs["foor"]()
    // 反射
    xfuncs := map[string]interface{}{"say": say}
    Call(xfuncs, "say", 123)

}

// 输出
// Start->foor()
// This text is 123

相关文章推荐

Go 根据字符串调用指定函数

随学随记,留备查 1、初学web设计,咱不想使用第三方库;于是乎HandleFunc()写的满屏都是……就想着模拟MVC思想,根据URL的路径自动调用指定的控制器方法,岂不是很好; 2、尝试使用Go的...
  • HOOKTTG
  • HOOKTTG
  • 2016年08月11日 17:25
  • 1580

Golang 通过接口传递对象,并通过反射调用对象中方法

一下午对Golang与Web框架的实现又有了进一步认识,学习新语言,痛并快乐着,走上正题。...

Go语言核心之美 3.3-Map

哈希表是一种非常好用、适用很广的数据结构,它是key-value对的无序集合,其中key是唯一的,通过key可以在常数复杂度时间内进行查询、更新或删除,无论表有多大。 Go语言的map就是对哈希表的引...

Go语言核心之美 4.2-递归函数

函数是可以递归调用的,这意味着函数可以直接或者间接调用它自身。对于许多问题而言,递归是一种非常有用的技术,例如处理递归的数据结构(树形结构),在3.4节中,我们通过遍历二叉树来实现简单的插入排序,在本...

Go语言核心之美 4.1-函数声明

函数有以下几个优点:可以让把一系列语句打包成一个程序单元;可以把大的工作分解为小的任务,这些任务可以让不同程序员在不同时间、不同地点独立完成;一个函数可以对用户隐藏实现细节。这些优点,让函数变成了程序...

cocos2d-x3.0中数据类型vector,map和value的分析和挖掘

coco2d-x3.0中数据类型vector,map,value的分析,很好的结合了c++标准库的方法和oc的内存管理体系,拜托了以前oc的数据存储模式,更好的适合c++的开发。...

JavaScript中函数式编程的体现--map和reduce

这两个函数都在某种程度上体现了函数式编程的思想,即将函数作为传入另一个函数的参数。map()方法的调用者一般是个数组,参数是一个函数,称为callback,返回值是一个由原数组中每个元素执行给定cal...
  • Pwiling
  • Pwiling
  • 2016年07月08日 13:09
  • 1888

零基础学python-19.2 列表解析与序列映射函数map(2)增加分支测试与嵌套循环

这一章节我们继续来深入讨论一下python的列表解析与map,这一次我们增加了分支测试与嵌套循环,下面让我们来看看一些例子: 分支测试(if) 场景1:选出列表里面的偶数 第一种我们使用...

python2 filter() map() reduce()函数基础

python2 filter() map() reduce()

HDU1171 Big Event in HDU 01背包 母函数 TWT Tokyo Olympic 2COMBO-1 未完待续

Big Event in HDU Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Other...
  • kyoma
  • kyoma
  • 2016年09月02日 15:53
  • 236
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:<2> go -反射-函数map化
举报原因:
原因补充:

(最多只允许输入30个字)