栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

GO语言-回调函数、闭包、装饰器模式

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

GO语言-回调函数、闭包、装饰器模式

回调函数

在go语言中,可以将一个函数作为另一个函数的参数。如:将func1()函数作为func2函数的参数。

fun2()就是高阶函数;fun1()就是回调函数。

func main() {
	fmt.Println(func2(1, 2, func1))
}

func func1(a, b int) int {
	return a + b
}

func func2(a, b int, fun func(int, int) int) int {
	res1 := fun(a, b)
	return res1
}

使用匿名函数作为回调函数
  1. 将匿名函数赋值给变量
  2. 高阶函数中直接写匿名函数
func main() {
	//1.将匿名函数赋值给变量
	func1 := func(a, b int) int {
		res := a + b
		return res
	}

	fmt.Println("匿名函数作为回调函数1:", func2(1, 2, func1))

	//2.高阶函数中直接写匿名函数
	res := func2(2, 3, func(a, b int) int {
		return a * b
	})
	fmt.Println("匿名函数作为回调函数2:", res)

}

func func2(a, b int, fun func(int, int) int) int {
	res1 := fun(a, b)
	return res1
}

 

闭包

闭包:就是将函数作为返回值,返回的这个函数就是闭包。

常见创建闭包的方式:在一个函数中创建另一个函数。

特性:

  1. 内函数可以访问外函数的变量
  2. 闭包中的变量可以常驻内存中
func main() {
	res := closure()
	fmt.Println("第1次执行, i:", res())
	fmt.Println("第2次执行, i:", res())
	fmt.Println("第3次执行, i:", res())
}

func closure() func() int {
	i := 0

	fun := func() int {
		i++
		return i
	}
	return fun
}

 

GO语言设计模式-装饰器模式

在GO语言中实现装饰器,不像Python有语法糖,只能手动赋值给同名变量。

关于装饰器的作用和Python如何实现装饰器,可参考另一篇文章Python-装饰器_一边学习一边哭的博客-CSDN博客概述在讲装饰器之前,要引入一个面向对象的核心原则——“开发封闭原则”。开放封闭原则主要体现在两个方面:对扩展开放,意味着有新的需求或变化时,可以对现有代码进行扩展,以适应新的情况。对修改封闭,意味着类一旦设计完成,就可以独立完成其工作,而不要对类进行任何修改。对于python中的已经完成的函数。我们应该不要对已有函数本身直接进行修改,但是我们仍然在需要新的功能时对其进行扩展。装饰器的格式在需要被装饰的函数上一行添加:@decorator_name一个简单的装饰器可以https://blog.csdn.net/qq522044637/article/details/121525002

go语言中实现装饰器

type logFunc func(msg string)

func main() {
	mytest := decoratorFunc(mytest)
	mytest("hello")
}

func mytest(msg string) {
	fmt.Println(msg)
}

func decoratorFunc(fun logFunc) logFunc {
	logFun := func(msg string) {
		fmt.Println("---开始记录日志---")
		fun(msg)
		fmt.Println("---日志记录结束---")
	}
	return logFun
}

原本mytest函数只是简单输出信息。遵循开放封闭原则,在不修改mytest函数的情况下,对其新增其他功能(输出了记录日志标识)。

 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/977288.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号