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 多态方法构造器执行方法

可见,当我们试图构造一个B时,应该会优先构造B的父类A,所以会调用父类A的构造函数A(),所以会输出

795
来自专栏柠檬先生

JavaScript 基础(一)

基本语法: 区分大小写:       ECMAScript 中的一切(变量,函数名和操作符)都区分大小写。 标识符:     表示符就是指,变量,函数,属性...

18310
来自专栏大闲人柴毛毛

剑指offer——面试题10输入一个十进制整数,统计其中二进制1的个数

/** * 题目:输入一个十进制整数,统计其中二进制1的个数 * @author 大闲人柴毛毛 */ public class CountBitOne {...

3164
来自专栏文渊之博

xpath语法大全

XPath 节点 ---- XPath 术语 节点 在 XPath 中,有七种类型的节点:元素、属性、文本、命名空间、处理指令、注释以及文档(根)节点。XML...

3598
来自专栏章鱼的慢慢技术路

蓝桥杯题库基础练习:进制转换

1364
来自专栏Android先生

Kotlin入门教程,快使用Kotlin吧

数组用Array类实现,和Java不同的地方在于,Array类有一个size属性表示数组长度,还有get和set方法,但是也可以使用array[position...

741
来自专栏cs

与算法有关的习题二道

在猿问上回答了几道题,其中二题还不错,记录一下 题一 要求输入一串不是很长的字符串,在最大的字符后加(max),字符串没有空格,只在第一个出现最大的字符后加(m...

2836
来自专栏ml

C plus plus 控制格式

使用这些格式需要声明包含<iomainip> long flags( ) const 返回当前的格式标志。 long flays(long newflag) 设...

2064
来自专栏上善若水

008-golang-container/list 链表的简单使用

1027
来自专栏Python攻城狮

Javascript(1)-js入门

这里主要指字符串的各种函数 str.length() 获取字符串长度 str.charAt(index)获取指定位置的字符 str.indexOf(cha...

644

扫码关注云+社区