博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
将函数放于map中
阅读量:5870 次
发布时间:2019-06-19

本文共 1361 字,大约阅读时间需要 4 分钟。

hot3.png

     这个问题我不知道该怎样描述,大致意思是,我有一组函数,我想根据传入的名称来确定到底应该执行哪一个函数。当然,可以写像switch或者 是if else这样的语句进行判断,但是,总觉得这样写太俗,虽然能够达到预期的结果,但是代码看起来相当不美观。其实,原来我只是在乎功能,也不会很在意别人看我代码的感受,更不要说可维护性了。只是,近期,组里经常进行代码走查,我那代码五天走了三次,其中这五天还包括了周六日(当然,周六日是正常休息的,我的意思是,代码走查很频繁)每次代码走查,大家都会给我提好多意见,然后最后就总有一种感觉:我这几天白忙活了,所有代码都被否定了。当然,每次code review之后,也有很多收获。组里共四个人,他们三个都是编程经验丰富的高手,就我菜鸟一只,所以,我有很多师傅可以请教呀。他们三个都很好,我遇到不理解的问题,就可着劲的问,每次都说,你能不能讲得现实点。最后都会问到实现细节上。所以,虽然代码经常被否决,我却可以在很短的时间内重整旗鼓,重新组织代码。我现在追求的不再只是功能完善,而是上了一个台阶,要可读性强,结构清晰。貌似说远了哈,继续刚才的问题。如果碰到这种需要比较出结果的,在go中,我们首先想到的当然是map,有一个key值,我就有可能给找一个value值。所以,今天的主题就是讲函数作为map中的value.

package mainimport (	"fmt")type myfunc func(x, y int)func add(x, y int) {	fmt.Println(x + y)}func minus(x, y int) {	fmt.Println(x - y)}func multiply(x, y int) {	fmt.Println(x * y)}var mapfunc = map[string]myfunc{	"add":      add,	"minus":    minus,	"multiply": multiply,}func main() {	param := "minus"	a, b := 5, 7	if ff, ok := mapfunc[param]; ok {		ff(a, b)	}}

上述代码是一个比较简单的例子,目的就是说明做法。关键的是要定义一个函数变量,这个貌似与C中的函数指针有些像,type myfunc func(x,y int),函数的形式是用户自定义的,入参还有返回值,自己定义。其实,可以将这个函数定义看做是一个接口,在GO中,一个类实现了一个接口不需要显式定义,只要是实现了这些接口,编译器会知道。同样的,在本例中,你自定义的函数可以随便命名,只要入参还有返回值与定义中的相同便可以了。最开始的时候,我还有一个疑惑,那参数是怎样传递过去的呢?后来想想,函数都拿到了,何愁参数怎样传进去呢,直接跟上就ok了呀。

  今天同事还问我这个事,结果,他给出了更好的方案,不用map,而是用数组,将字符串映射到整数上,直接拿着索引去数组中找函数,还免去了搜索,一步到位,不得不承认,姜还是老的辣,虽然是很小的一部分,也要力求做到极致。

转载于:https://my.oschina.net/u/150469/blog/135609

你可能感兴趣的文章
总有几位老师让你一生感激不尽----我的大学老师
查看>>
Lintcode: Update Bits
查看>>
深入理解JVM--类的执行机制
查看>>
0c-38-ARC快速入门
查看>>
CSS中margin和padding的区别
查看>>
Clojure学习02:语法
查看>>
docker安装hadoop
查看>>
URL安全的Base64编码
查看>>
安装Node和NPM
查看>>
随便说说removeFromSuperview方法
查看>>
【转载】Ogre的内存分配策略
查看>>
Linux设备模型(9)_device resource management ---devm申请空间【转】
查看>>
解决eclipse中出现Resource is out of sync with the file system问题
查看>>
Java学习——对象和类
查看>>
Atitit.php nginx页面空白 并返回500的解决
查看>>
struts2 OGNL表达式
查看>>
Andriod使用webview控件往APP里内嵌网页
查看>>
二级菜单不同方法的实现
查看>>
第五章 mybatis批量更新update
查看>>
pacific-atlantic-water-flow(不错)
查看>>