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. 1071 Speech Patterns 需再做
  2. 15.4 xshell使用xftp传输文件;15.5 使用pure-ftpd搭建ftp服务
  3. java-StringBuffer构造方法
  4. 使用Numpy和Opencv完成图像的基本数据分析(Part II)
  5. mysql 升序_mysql 的 查找 与 排序
  6. tomcat ---- 常用服务器
  7. 用CommonDialog公共对话框选取多个文件
  8. 鸿蒙2.0手机版体验,华为鸿蒙OS 2.0手机版功能抢先曝光:体验前所未有
  9. 联通实时计算平台演进与实践
  10. 三人抢答器逻辑电路图_数字电路3人抢答器实验报告.doc
  11. 微信公众号配置JSAPI支付
  12. 2022抖音日活用户超8亿,旅游商家如何从抖音获客?
  13. Centos8装Wine笔记
  14. lucas–kanade_异常检测常用光流法量化对比:Farneback/Horn-Schunck / Lucas–Kanade
  15. 少儿计算机兴趣小组活动记录,小学美术兴趣小组活动记录-(一).doc
  16. 网站备案 服务器不在一个地方,域名和服务器不在一个 如何备案
  17. 蓝桥杯试题:求数差(简单易懂无脑)java
  18. 电脑用户名中文改英文步骤总结
  19. 【Vue学习笔记】尚硅谷Vue2.0+Vue3.0全套教程丨vue.js从入门到精通
  20. vue-cli中mock本地json数据踩雷:报错404 (GET http://localhost:8080/goods 404 (Not Found) )

热门文章

  1. 邬贺铨:区块链技术将确保物联网隐私和安全
  2. 云栖Android精华文章合集
  3. 实验一 小凡和VMware虚拟机的使用练习
  4. 手动排除fbiytty和vcxlcph病毒的干扰
  5. no Bloomberg, wind, ceic, csmar at cambridge
  6. imperial college rejection
  7. 比较好的处理事情的方法
  8. html5 新增属性了解
  9. SpringBoot从介绍到各个框架的整合
  10. 外媒炒作中国黑客入侵美保险公司 并无相关证据