golang学习之闭包

匿名函数不能够独立存在,但可以被赋值于某个变量,即保存函数的地址到变量中:fplus := func(x, y int) int { return x + y },然后通过变量名对函数进行调用:fplus(3,4)。

当然,也可以直接对匿名函数进行调用:func(x, y int) int { return x + y } (3, 4)

func() {
    sum = 0.0
    for i := 1; i <= 1e6; i++ {
        sum += i
    }
}()

表示参数列表的第一对括号必须紧挨着关键字 func,因为匿名函数没有名称。花括号 {} 涵盖着函数体,最后的一对括号表示对该匿名函数的调用。

使用defer结合匿名函数(闭包)修改方法返回值:

package main

import "fmt"

func f() (ret int, str string) {
    defer func() {
        ret++
    }()
    defer func() {
        str += ("##########")
    }()
    return 22, "111 "
}

func main() {
    fmt.Println(f())
    
}

打印输出:

23 111 ##########

闭包实例:

package main

import "fmt"

func main() {
    var f = Adder()
    fmt.Print(f(1), " - ")
    fmt.Print(f(20), " - ")
    fmt.Print(f(300))
}

func Adder() func(int) int {
    var x int
    return func(delta int) int {
        x += delta
        return x
    }
}

第一次调用Adder函数返回一个func(int) int函数,再次调用时局部变量x的值会被累加,最终输出:

1 - 21 - 321

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏北京马哥教育

python3急速入门 (二) 列表的使用

云豆贴心提醒,这是马哥Linux运维Python3急速入门系列第1篇文章 列表用于组织其它数值,即写在方括号之间、用逗号分隔开的数值列表。列表内的项目不必全是...

2735
来自专栏Golang语言社区

【Go 语言社区】Golang 语言学习-变量

注:go语言中,不要求语句末尾加分号,这点和python类似。 注:go语言中,不允许定义没有用到的变量,否则报错,就像import一个没用到的package会...

2557
来自专栏趣学算法

数据结构 第3讲 顺序表

顺序表是最简单的一种线性结构,逻辑上相邻的数据在计算机内的存储位置也是相邻的,可以快速定位第几个元素,中间不允许有空,所以插入、删除时需要移动大量元素。

953
来自专栏逆向技术

C语言第五讲,语句 顺序循环选择.

括号的内容我们给真假就行, 对应到高级语言中 则是 true (真) 和 false(假)

3345
来自专栏北京马哥教育

实战案例手把手教你Python流程控制技巧

? 作者:PianoOrRock 来源: http://blog.csdn.net/pianoorrock/article/details/71131570 ...

2756
来自专栏一个会写诗的程序员的博客

《Kotlin极简教程》第三章 Kotlin基本数据类型数字基本类型

在 Kotlin 中,所有东西都是对象:数字、字符、布尔和数组。(JavaScript)

681
来自专栏Python入门

Python函数式编程-高阶函数、匿名函数、装饰器、偏函数

本篇文章我们来介绍下Python函数式编程的知识。最主要的一点,Python中的函数是对象,可以复制给变量!好了,我们来介绍几个Python函数式编程中的要点,...

922
来自专栏代码小睿

绝对定位的层判断是否有相互覆盖的解决算法

  这个算法我在上篇博文《jQuery 模拟 ubuntu 3D desktop 的 Dodge Effect 效果》中有提到过。   但那时想法过于简单,当时...

2466
来自专栏武培轩的专栏

剑指Offer-斐波那契数列

package Recursion; /** * 题目描述 * 大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项。 * n<...

3294
来自专栏追不上乌龟的兔子

为什么Python中的None is None is None == True

最近在StackOverflow上看到了一个问题,为什么Python中的None is None is None返回True,看到大家的讨论后对Python中的...

2526

扫码关注云+社区