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 条评论
登录 后参与评论

相关文章

来自专栏精讲JAVA

Comparable 与 Comparator 浅析

来源:朱小厮, blog.csdn.net/u013256816/article/details/50899416 今天博主在翻阅TreeMap的源码,发现其键...

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

Java8 Lambda表达式.md什么是λ表达式λ表达式的类型λ表达式的使用其它相关概念

为了支持函数式编程,Java 8引入了Lambda表达式. 在Java 8中采用的是内部类来实现Lambda表达式.具体实现代码,可以通过debug看, 同时...

1653
来自专栏二进制文集

JDK源码分析 反射

对于JDK源码分析的文章,仅仅记录我认为重要的地方。源码的细节实在太多,不可能面面俱到地写清每个逻辑。所以我的JDK源码分析,着重在JDK的体系架构层面,具体源...

2786
来自专栏hbbliyong

Python正则进阶

  返回一个列表,如果正则表达式中没有分组,则列表中包含的是所有匹配的内容,如果正则表达式中有分组,则列表中的每个元素是一个元组,元组中包含子分组中匹配到的内容...

1363
来自专栏平凡文摘

Comparable 与 Comparator 浅析

1364
来自专栏C/C++基础

C++11 变参模板

版权声明:感谢您对博文的关注!校招与社招,有需要内推腾讯的可以QQ(1589276509)or 微信(louislvlv)联系我哈,期待您的加入。 ...

3852
来自专栏拭心的安卓进阶之路

深入理解 Java 反射:Field (成员变量)

深入理解 Java 反射系列: 深入理解 Java 反射:Class (反射的入口) 深入理解 Java 反射:Field (成员变量) 深入理解 Java ...

7718
来自专栏DT乱“码”

Java 枚举类型enum 的使用

Java 枚举类型enum 的使用 最近跟同事讨论问题的时候,突然同事提到我们为什么java 中定义的常量值不采用enmu 枚举类型,而采用public fin...

2949
来自专栏风口上的猪的文章

.NET面试题系列[12] - C# 3.0 LINQ的准备工作

"为了使LINQ能够正常工作,代码必须简化到它要求的程度。" - Jon Skeet

1153
来自专栏一个爱瞎折腾的程序猿

LINQ

select:提取要查询的数据                 where:筛选满足条件的元素   

1051

扫码关注云+社区

领取腾讯云代金券