Go基础知识学习(2) 回调函数
2014-08-08 12:10
543 查看
回调函数的定义
回调函数,一个通过函数指针调用的函数,本质上还是函数,由于它的应用场景而出现回调函数这个名词。它非常重要,在一些优秀的C库中经常见到,它不是由函数的实现方实现(但是由实现方定义,通常在头文件定义),而由调用方实现,这样便于问题的抽象。可以通过下面这个例子简单的体会一下。例如:
在C语言 标准库中一般是同个函数指针实现, 比如 C库中快速排序的比较函数
void qsort(void base, size_t nitems, size_t size, int (compar)(const void , const void))
这里的compar就是这个回调函数
在Android中也是非常多的见到回调函数,比如按键的OnClickListener类似监听接口,本质也是回调函数。
Golang回调函数
Golang当然也是支持回调函数的,我们来实现一个回调函数的例子:将一个数组中偶数的值相加后的结果输出, 将一个数组中奇数的值相加后的结果输出。
回调函数是用来抽象功能的利器,这里的sum函数可以理解为对符合条件的slice值求和。
有了这么一个抽象,我们可以很轻易的用sum实现对3的倍数的值求和,4的倍数的值求和,
而且我们不需要重新编写sum函数。
package main import ( "fmt" ) func main() { //create slice s := make([]int, 10) fmt.Println(s) // init for i, _ := range s { s[i] = i } fmt.Println(s) // sum all elemets who are even number fmt.Println(sum(s, isDouble)) // sum all elemets who are single number fmt.Println(sum(s, isSingle)) } /** callback function : elemet who is even number **/ func isDouble(a int) bool { if a%2 == 0 { return true } else { return false } } /** callback function : elemet who is single number **/ func isSingle(a int) bool { if a%2 == 0 { return false } else { return true } } /** sum all element who are func number **/ func sum(s []int, f func(int) bool) int { sum := 0 for _, v := range s { if f(v) { sum += v } } return sum }
代码
https://github.com/panyingyun/gostudy/blob/master/exp2.go
参考书籍
李先静《系统程序员成长计划》,在这本书中比较深入的对“抽象”这个词的精彩理解,而且将回调函数运用极其娴熟。相关文章推荐
- Go基础知识学习(1)
- [Golong]学习笔记(一) 基础知识
- Go基础知识学习(3)闭包
- Go基础知识学习(7) 并发
- [Golong]学习笔记(一) 基础知识
- GO--基础知识学习一
- [Golong]学习笔记(一) 基础知识
- Go基础知识学习(6) 接口
- Go语言学习笔记一、基础知识
- [Golong]学习笔记(一) 基础知识
- Go基础知识学习(5) 指针,new, make
- Go--基础知识学习三
- Go--基础知识学习二
- Go基础知识学习(4)包
- Node.js学习--基础知识(3)--回调函数与事件
- 网络基础知识讲座之五:学习生成树协议
- XML基础知识学习十(微软的XML解析器)
- XML基础知识学习七(XML 浏览器(Netscape、Explorer))
- 《JAVA2核心技术 卷一 基础知识(原书第七版)》《Core java2,Volume I-Fondamentsls Seven Edition》 学习笔记(三)对象的克隆
- 《JAVA2核心技术 卷一 基础知识(原书第七版)》《Core java2,Volume I-Fondamentsls Seven Edition》 学习笔记(二)BREAK和CONTINUE的区别