Go语言入门8(匿名函数 闭包)

这篇具有很好参考价值的文章主要介绍了Go语言入门8(匿名函数 闭包)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

匿名函数 闭包

匿名函数

​ 顾名思义,就是没有名字的函数。。。

func(){
    fmt.Println("我就是匿名函数")
}

匿名函数的两种执行方法

  1. 将匿名函数赋给一个变量
  2. 定义后立即执行匿名函数
// 讲匿名函数赋给一个变量
tmp := func(){
    fmt.Println("我是匿名函数")
}
tmp()

// 定以后立即执行匿名函数(在函数定义之后加小括号,表示直接运行)
func(){
    fmt.Println("我是匿名函数")
}()

闭包

​ 闭包是由函数和与其相关的引用环境组合而成的实体,个人认为就是把一个函数以及函数所用到的参数用另外一个函数包起来,保证函数多次运行的时候,所用到的值不会被初始化

func demo01() func(){
    tmp := "这个变量无论多少次都不会被初始化"
    tmp1 := 1
    return func(){
        tmp1++
        fmt.Println(tmp,tmp1)
    }
}
func main(){
    test := demo01() // 此时test就是一个闭包
    test() // 这个变量无论多少次都不会被初始化 2
    test() // 这个变量无论多少次都不会被初始化 3
    test() // 这个变量无论多少次都不会被初始化 4
    test() // 这个变量无论多少次都不会被初始化 5
}

​ 在上面的代码可以看到,定义了两个变量tmp和tmp1,这个被称之为自由变量,把匿名函数放在return返回的地方和自由变量构成的那个整体,就是闭包

优点

​ 个人认为,就是使用自由变量这种概念,延长了函数中某些变量的生命周期,避免这些变量随着函数的调用而反复的初始化

GPT是这么说的

闭包(Closure)是一种在Go语言中支持的函数特性,它允许函数访问并操作函数外部的变量。闭包有以下几个好处:

- 封装:闭包可以访问函数外部的变量,但外部无法访问闭包内部的变量。这样可以实现数据的封装和保护。
- 状态保持:闭包可以捕获并保存外部变量的状态,即使函数执行完毕,这些状态仍然存在。这样可以实现状态的保持和传递。
- 动态生成函数:闭包可以根据运行时的数据动态生成新的函数,提供更多的灵活性。

总之,闭包为Go语言提供了更多的编程灵活性和表达能力,可以帮助开发人员更好地解决复杂问题。文章来源地址https://www.toymoban.com/news/detail-419479.html

到了这里,关于Go语言入门8(匿名函数 闭包)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【PHP】函数-作用域&可变函数&匿名函数&闭包&常用系统函数

    函数:function,是一种语法结构,将实现某一个功能的代码块(多行代码)封装到一个结构中,从而实现代码的重复利用(复用)。 定义函数的目的:是为了实现代码的重复利用,一个功能一个函数(简单明了) 函数的使用:通过 函数名() 的方式进行函数访问 注意: 如果函

    2024年02月11日
    浏览(33)
  • Rust编程语言入门之函数式语言特性:-迭代器和闭包

    闭包(closures) 迭代器(iterators) 优化改善 12 章的实例项目 讨论闭包和迭代器的运行时性能 闭包:可以捕获其所在环境的匿名函数。 闭包: 是匿名函数 保存为变量、作为参数 可在一个地方创建闭包,然后在另一个上下文中调用闭包来完成运算 可从其定义的作用域捕获值

    2023年04月08日
    浏览(31)
  • Scala的函数式编程与高阶函数,匿名函数,偏函数,函数的闭包、柯里化,抽象控制,懒加载等

    函数式编程 解决问题时,将问题分解成一个一个的步骤,将每个步骤进行封装(函数),通过调用这些封装好的步骤,解决问题。 例如:请求-用户名、密码-连接 JDBC-读取数据库 Scala 语言是一个完全函数式编程语言。万物皆函数。 函数的本质:函数可以当做一个值进行传递

    2024年02月09日
    浏览(43)
  • 第5章 函数式编程**-函数和方法,高阶函数,匿名函数,函数柯里化,闭包,递归,控制抽象(传值参数,传名参数),惰性加载...

    1)面向对象编程 解决问题,分解对象,行为,属性,然后通过对象的关系以及行为的调用来解决问题。 对象:用户 行为:登录、连接 JDBC、读取数据库 属性:用户名、密码 Scala 语言是一个完全面向对象编程语言。万物皆对象 对象的本质:对数据和行为的一个封装 2)函数式编

    2023年04月10日
    浏览(71)
  • go匿名函数

    匿名函数 1.1.1. 匿名函数 匿名函数是指不需要定义函数名的一种函数实现方式。1958年LISP首先采用匿名函数。 在Go里面,函数可以像普通变量一样被传递或使用,Go语言支持随时在代码里定义匿名函数。 匿名函数由一个不带函数名的函数声明和函数体组成。匿名函数的优越性

    2024年02月15日
    浏览(25)
  • go语言入门-一文带你掌握go语言函数

    本文go语言入门-掌握go语言函数收录于《go语言学习专栏》专栏,此专栏带你从零开始学习go语言。 在每一种编程语言中都有函数的概念,函数是基本的代码快,用于执行一个任务。 我们之前写的函数代码中,都包含一个main函数: 这个 main 就是一个函数的定义,包含了以下几

    2024年02月03日
    浏览(33)
  • Go语言的匿名字段

    Go语言支持一种特殊的字段 只需要提供类型而不需要写字段名 的字段**,**称之为 匿名字段 或者 嵌套字段 。 所谓 匿名字段 实际上是一种 结构体嵌套 的方式,所以也可以称作 嵌套字段 。 这种方式可以实现组合复用,即通过匿名字段,结构体可以直接访问嵌套结构体的字

    2024年02月19日
    浏览(23)
  • Go语言匿名结构体

    Go 语言中的匿名结构体是一种非常有用的编程技巧,它可以帮助我们实现代码复用、结构清晰等目标。 首先,我们需要了解什么是结构体。在 Go 语言中,结构体是一种自定义的数据类型,可以由多个字段组成。结构体的定义如下: 这里我们定义了一个 Person 结构体,它由两

    2024年02月11日
    浏览(29)
  • 【Kotlin】DSL 领域特定语言 ( apply 标准库函数分析 | 普通匿名函数 | 扩展匿名函数 | 泛型扩展匿名函数 )

    本章总结 : 读懂 apply 标准库函数 核心是其 block: T.() - Unit 参数 , 这是 泛型扩展匿名函数 ; 泛型扩展匿名函数 T.() - Unit 演变路径 : 普通匿名函数 : () - Unit , 这个函数 参数 和 返回值 都为空 ; 扩展匿名函数 : String.() - Unit , 这个函数 是 为 具体的 String 类型定义的扩展函数 ; 泛型

    2023年04月09日
    浏览(28)
  • Python趣味入门11:函数作为参数以及匿名函数

    Python里可以把函数本身当成是参数,比如Python内置函数map可以通过传入的函数返回值来一一映射列表集合里的元素,我们也可以在定义函数时,以调用函数的方式使用参数。 假设有一个列表1至9共有9个元素,现在需要求其平方数列。 map函数的示例   以上的代码,主要完成了

    2024年02月04日
    浏览(39)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包