概念
闭包就是一个函数与其相关的引用环境组成的一个整体。
闭包本质其实是一个函数,但是这个函数会用到函数外的变量,它们共同组成的整体我们叫做闭包。

简单举例说明

package main
import (
"fmt"
) //测试小程序 累加器 func AddUpper () func (int) int {
var n int =
return func (x int) int {
n = n + x
return n
}
}
func main(){ test := AddUpper() //test变量接收Addupper返回的函数 //因为Addupper返回的结果是一个函数,test(1)传参是1,
//那么其实就是把1传参给Addupper里的int 参数x,x在使用的时候会和外面的n相加
//那么x+n :1+10 =11
fmt.Println(test()) //11 //下面的结果会做说明
fmt.Println(test()) //13 fmt.Println(test()) //16
}
D:\goproject\src\main>go run hello.go

当反复调用test函数时,因为n是只初始化一次,因此每次调用一次就进行累计,而不会初始化。变量n永远隐式存在于test中

进一步说明

//其实下面这块代码就是一个简单的闭包
var n int =
return func (x int) int {
n = n + x
return n
}
//返回的是一个匿名函数,但是这个匿名函数引用到了函数外的变量n,但是这个匿名函数会和这个n形成一个引用关系的整体,构成闭包

  

Golang闭包入门了解的更多相关文章

  1. Golang快速入门

    Go语言简介: Golang 简称 Go,是一个开源的编程语言,Go是从2007年末由 Robert Griesemer, Rob Pike, Ken Thompson主持开发,后来还加入了Ian L ...

  2. Javascript闭包入门(译文)

    前言 总括 :这篇文章使用有效的javascript代码向程序员们解释了闭包,大牛和功能型程序员请自行忽略. 译者 :文章写在2006年,可直到翻译的21小时之前作者还在完善这篇文章,在Stackov ...

  3. golang语言入门及安装

    golang语言入门及安装 go语言是google在2009年发布的开源编程语言使用Go编译的程序可以媲美C或C++代码的速度,而且更加安全.支持并行进程. 本次讲解在windows上安装go语言的开 ...

  4. golang 闭包

    说起golang闭包,在官方手册里面看过一次,没怎么用过,还是因为6哥经常用,阅读他的代码好多闭包,emmm,今天就学习一下. 在过去近十年时间里,面向对象编程大行其道,以至于在大学的教育里,老师也只 ...

  5. Golang Web入门(4):如何设计API

    摘要 在之前的几篇文章中,我们从如何实现最简单的HTTP服务器,到如何对路由进行改进,到如何增加中间件.总的来讲,我们已经把Web服务器相关的内容大概梳理了一遍了.在这一篇文章中,我们将从最简单的一个 ...

  6. Golang闭包的坑

    team leader 发现一个Golang程序的bug,是由不正确使用闭包引起.记载一下,以作备忘. 猜猜一下程序的结果: import ( "fmt" "time&q ...

  7. Golang Web入门(1):自顶向下理解Http服务器

    摘要 由于Golang优秀的并发处理,很多公司使用Golang编写微服务.对于Golang来说,只需要短短几行代码就可以实现一个简单的Http服务器.加上Golang的协程,这个服务器可以拥有极高的性 ...

  8. Golang Web入门(2):如何实现一个高性能的路由

    摘要 在上一篇文章中,我们聊了聊在Golang中怎么实现一个Http服务器.但是在最后我们可以发现,固然DefaultServeMux可以做路由分发的功能,但是他的功能同样是不完善的. 由Defaul ...

  9. Golang简单入门教程——函数进阶篇

    本文始发于个人公众号:TechFlow,原创不易,求个关注 今天是golang专题的第八篇,我们来聊聊golang当中的函数. 我们在之前的时候已经介绍过了函数的基本用法,知道了怎么样设计或者是定义一 ...

随机推荐

  1. Python才排第8名!2018增速最快TOP 10编程语言盘点

    在技术前沿的硅谷,开发者们不仅要学习多种热门的编程语言,还要时时盯着新的编程语言的崛起,生怕自己掉队. 作为世界最大开源软件社区,Github每年都会发布年度Octoverse报告,向大家展示年度最流 ...

  2. 我的Chrome插件

    1.AdBlock 用来屏蔽广告,用过的人都说好. 2.Flash Block(Plus) 用来限制Flash的播放. 3.Flash Control 用来限制Flash的播放. 4.Full Pag ...

  3. 左右两栏div布局,高度自适应

    页面结构如下: <div class="container"> <div class="left"> left </div> ...

  4. 10 Free Image Hosting Sites for Your Photos

    https://www.lifewire.com/free-image-hosting-sites-3486329 Wondering if there are there any good site ...

  5. 数据库页已标记为 RestorePending,可能表明磁盘已损坏。要从此状态恢复,请执行还原操作。

    错误提示: 消息 829,级别 21,状态 1,第 1 行 数据库 ID 15,页 (1:21826) 已标记为 RestorePending,可能表明磁盘已损坏.要从此状态恢复,请执行还原操作. 引 ...

  6. Jenkins自动化构建(二)众多问题

    1.反向代理设置有误 系统管理页面提示,反向代理设置有误,其实这是由于URL设置有问题: 打开系统管理-->系统设置-->URL Jenkins URL设置有问题,改一下,去掉jenkin ...

  7. time_t time()

    time_t  atime,  btime; time(&atime); btime = time(0); 两种方式效果一样.

  8. JavaScript原型继承的实例

    // 创建构造函数实例(获取DOM节点) <div id="app">测试字符</div>

  9. RRDtool 安装和使用

    一.RRDtool 的功能及使用介绍 定义:RRDtool(Round Robin Database Tool)是一个用来处理定量数据的开源高性能数据库. 1.RRDtool 的特性 由于 RRDto ...

  10. Linux 运维测试及第三应用及测试工具

    一 .第三方应用及测试工具链接地址 https://pan.baidu.com/s/1rLQ5NCZvxcy93YQ4fGFaBQ 1.linux LSI系列raid卡监测工具 1)使用参数详解链接: ...