golang闭包有什么用


本文摘自php中文网,作者(*-*)浩,侵删。

什么是闭包?

Go 函数可以是一个闭包。闭包是一个函数值,它引用了函数体之外的变量。 (推荐学习:go)

这个函数可以对这个引用的变量进行访问和赋值;换句话说这个函数被“绑定”在这个变量上。

我的不靠谱的理解,一个闭包相当于一个类的实例,函数体之外的变量相当于这个实例存储的变量。

没有闭包的时候,函数就是一次性买卖,函数执行完毕后就无法再更改函数中变量的值(应该是内存释放了);

有了闭包后函数就成为了一个变量的值,只要变量没被释放,函数就会一直处于存活并独享的状态,因此可以后期更改函数中变量的值(因为这样就不会被go给回收内存了,会一直缓存在那里)。

闭包的主要意义

缩小变量作用域,减少对全局变量的污染。下面的累加如果用全局变量进行实现,全局变量容易被其他人污染。

同时,所有我要实现n个累加器,那么每次需要n个全局变量。

利用背包,每个生成的累加器myAdder1, myAdder2 := adder(), adder()有自己独立的sum,sum可以看作为myAdder1.sum与myAdder2.sum。

利用背包可以实现有自身状态的函数!

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

package main

 

import (

    "fmt"

)

 

func adder() func(int) int {

    sum := 0

    return func(x int) int {

        sum += x

        return sum

    }

}

 

func main() {

    myAdder := adder()

     

    // 从1加到10

    for i := 1; i <= 10; i++ {

        myAdder(i)

    }

     

    fmt.Println(myAdder(0))

    // 再加上45

    fmt.Println(myAdder(45))

}

结果:

1

2

55// 1+...+10

100

以上就是golang闭包有什么用的详细内容,更多文章请关注木庄网络博客!!

相关阅读 >>

从go官方文档,我们能得到哪些资料?

go语言之并发

golang一行代码把array/slice转成逗号分隔的字符串

手撸golang 基本数据结构与算法 冒泡排序

手撸golang 架构设计原则 合成复用原则

golang gin怎么安装

golang官方嵌入文件到可执行程序

go基础及语法(四)

手撸golang 基本数据结构与算法 二叉查找树

golang context 详解

更多相关阅读请进入《golang》频道 >>




打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...