1、匿名函数(anonymous)
匿名函数是一种没有函数名的函数。
在声明匿名函数之后,在其后加上调用的参数列表,即可对匿名函数进行调用
匿名函数有两种调用执行方式:
(1)将匿名函数保存到变量,通过变量执行
(2)自执行匿名函数:在匿名函数后加调用的参数列表"()",即可对匿名函数进行立即调用

func main() {// 将匿名函数保存到变量add := func(x, y int) {fmt.Println(x + y)}add(10, 20) // 通过变量调用匿名函数//自执行匿名函数:匿名函数定义完加()直接执行func(x, y int) {fmt.Println(x + y)}(10, 20)
}

2、闭包(Closure)
闭包=匿名函数+引用环境(外层代码定义的变量),即有状态的匿名函数,也可以说:如果匿名函数引用了外部变量,就形成了一个闭包.
在闭包的生命周期内,引用环境即变量也一直有效,会常驻于内存当中。
函数本身是不存在信息的,但是闭包中的变量使闭包本身具备了存储信息的能力。

func makeSuffixFunc(suffix string) func(string) string {return func(name string) string {if !strings.HasSuffix(name, suffix) {return name + suffix}return name}
}func main() {jpgFunc := makeSuffixFunc(".jpg")txtFunc := makeSuffixFunc(".txt")fmt.Println(jpgFunc("test")) //test.jpgfmt.Println(txtFunc("test")) //test.txt
}

闭包像go协程一样在for循环时存在延迟绑定的问题。

实践:

func main() {arr := []float64{1, 9, 16}visit(arr, func(v float64) {v = math.Sqrt(v)fmt.Println("平方根", v)})visit(arr, func(v float64) {v = math.Pow(v, 2)fmt.Println("平方", v)})f2 := makeSuffix(".log")fmt.Println(f2("access"))fmt.Println(f2("access.log"))
}// 函数做参数,可以抽象出部分公共逻辑,抽出了循环操作
func visit(lst []float64, f func(float64)) {for _, value := range lst {f(value)}
}// 函数做返回值,根据不同情形做一件相似的事,检测是否有后缀
func makeSuffix(suffix string) func(string) string {return func(name string) string {if !strings.HasSuffix(name, suffix) {return name + suffix}return name}
}

Golang的匿名函数和闭包相关推荐

  1. php的匿名函数和闭包函数

    php的匿名函数和闭包函数 tags: 匿名函数 闭包函数 php闭包函数 php匿名函数 function use 引言:匿名函数和闭包函数都不是特别高深的知识,但是很多刚入门的朋友却总是很困惑,因 ...

  2. go语言中利用匿名函数和闭包实现文件名修改

    package mainimport ("fmt""strings" )//利用匿名函数和闭包实现文件后缀修改 func makeSuffix(suffix s ...

  3. JavaScript 匿名函数与闭包

    匿名函数与闭包 匿名函数 闭包 概念 相关知识点 闭包中的this 循环函数中的匿名函数和闭包 循环函数中的匿名函数 循环函数中的闭包 模仿块级作用域 私有变量 静态私有变量 匿名函数 没有函数名的函 ...

  4. javascript进阶课程--第三章--匿名函数和闭包

    javascript进阶课程--第三章--匿名函数和闭包 一.总结 二.学习要点 掌握匿名函数和闭包的应用 三.匿名函数和闭包 匿名函数 没有函数名字的函数 单独的匿名函数是无法运行和调用的 可以把匿 ...

  5. Scala 高阶函数(作为值的函数、匿名函数、闭包、柯里化)+隐式转换和隐式参数...

    Scala高级特性 1.    学习目标 1.1.   目标一:深入理解高阶函数 1.2.   目标二:深入理解隐式转换 2.    高阶函数 2.1.   概念 Scala混合了面向对象和函数式的特 ...

  6. JavaScript匿名函数和闭包

    概述 在JavaScript前端开发中,函数与对其状态即词法环境(lexical environment)的引用共同构成闭包(closure).也就是说,闭包可以让你从内部函数访问外部函数作用域.在J ...

  7. js 匿名函数和闭包

    匿名函数和闭包 转https://www.cnblogs.com/xiaowie/p/10277483.html 填写了注释 匿名函数就是没有名字的函数,闭包是可访问一个函数作用域里变量的函数.声明: ...

  8. php 匿名函数好处,谈谈PHP中的匿名函数与闭包

    //匿名函数,说白了就是"没有名字的函数",不多说.给一段代码可能更为明白: //例一,定义匿名函数并调用 $str='world'; $func=function ($str) ...

  9. 深入理解Java Lambda表达式,匿名函数,闭包

    前言 对于Lambda表达式一直是知其然不知其所以然,为了搞清楚什么是Lambda表达式,以及Lambda表达式的用法和作用,本文应运而生当做学习笔记分享出来,欢迎指正交流. 什么是Lambda 让我 ...

最新文章

  1. 用户 ‘IIS APPPOOL\IdealTest‘ 登录失败解决方案
  2. string.find()与string::npos
  3. 30个WordPress Retina(iPad)自适应主题
  4. 钉钉关键字回复功能_在家办公首日:钉钉、企业微信集体“崩溃”,只能选择 QQ、微信...
  5. Antechinus C# Editor!
  6. 使用CrossOver的Wine配置修改容器WIndows系统版本
  7. angular中的cookie读写
  8. Unity3D 显示FPS
  9. Harbor启动访问502错误
  10. 人力资源管理专业知识与实务(初级)【6】
  11. fantastic website
  12. dva的用法_dva基本用法
  13. 通过银行卡号识别银行
  14. Excel如何批量删除工作表全部图片?
  15. Linux安全防护【云锁】
  16. 信息安全系统设计基础期中总结
  17. Sql语句操作数据库(修改表,修改数据库)
  18. C++小作业——简单通讯录设计
  19. 学习JAVA.day05
  20. STM32+CubeMX开发工程笔记汇总(更新2022.6.12)

热门文章

  1. 新手入门 如何快速找到Python进阶路线?
  2. 威宝推出支持四接口的桌面硬盘新品
  3. 如何在window上把你的项目提交到github
  4. 让一张图片随着手指的移动而移动
  5. 让我吐血的一次重做系统
  6. 激励和设定可实现的目标是任何学习成功的关键。
  7. 一个硬核分布式数据库公司:pingcap
  8. formal method satisfiable check
  9. teams怎么去看谁在说话
  10. 把两个salmon和sea bass特征结合起来能够提高区分的准确率