继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

【九月打卡】第5天 go语言函数式编程

洋溢1310659
关注TA
已关注
手记 26
粉丝 2
获赞 4

课程名称GO开发工程师

课程章节:2-1函数式编程;2-2函数式编程例1;2-3函数式编程例2

课程讲师ccmouse

课程内容

函数编程:
参数、变量、返回值都可以是函数

函数指针:
C++里只能使用函数指针,不能将函数直接传递给别人

正统函数式编程:
1. ​不可变性:不能有状态,只有常量与函数
2. ​函数只能有一个参数

闭包:
函数体内的自由变量链接到了函数体外部,整个结构称之为闭包

go 语言不是正统的函数式编程

​斐波拉契数列(为函数实现接口)

func fibonacci() intGen {
	a, b := 0, 1
	return func() int {
		a, b = b, a+b
		return a
	}
}

type intGen func() int

// 函数是一定公民,也能实现接口
// 实现IO Reader 的read方法
func (g intGen) Read(p []byte) (n int, err error) {
	next := g()
	if next > 10000 {
		return 0, io.EOF // io.EOF 到达文件尾部
	}
	//使用strings Reader代理读取输入的数字
	s := fmt.Sprintf("%d\n", next) // 1\n 1\n 2\n
	return strings.NewReader(s).Read(p)
}

使用函数来遍历二叉树

func (node *Node) Traverse() {
	// 使用函数遍历"二叉树"
	node.TraverseFunc(func(n *Node) {
		n.Print()
	})
}

func (node *Node) TraverseFunc(f func(*Node)) {
	if node == nil {
		return
	}
	// 中序遍历,左->中->右
	node.Left.TraverseFunc(f)
	f(node) // 不用关心外部函数怎么实现,只管调用
	node.Right.TraverseFunc(f)
}

课程收获
函数是一等公民,也能实现接口。
使用函数传参,实现者内部无需关心外部函数具体实现,外部使用者可以做更多定制化的操作。
使用strings Reader代理读取输入的数字。
io.EOF 到达文件尾部。

图片描述

图片描述
图片描述

打开App,阅读手记
0人推荐
发表评论
随时随地看视频慕课网APP