为了账号安全,请及时绑定邮箱和手机立即绑定

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

标签:
Go

课程名称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 到达文件尾部。

图片描述

图片描述
图片描述

点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消