Golang闭包入门了解
概念
闭包就是一个函数与其相关的引用环境组成的一个整体。
闭包本质其实是一个函数,但是这个函数会用到函数外的变量,它们共同组成的整体我们叫做闭包。
简单举例说明
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闭包入门了解的更多相关文章
- Golang快速入门
Go语言简介: Golang 简称 Go,是一个开源的编程语言,Go是从2007年末由 Robert Griesemer, Rob Pike, Ken Thompson主持开发,后来还加入了Ian L ...
- Javascript闭包入门(译文)
前言 总括 :这篇文章使用有效的javascript代码向程序员们解释了闭包,大牛和功能型程序员请自行忽略. 译者 :文章写在2006年,可直到翻译的21小时之前作者还在完善这篇文章,在Stackov ...
- golang语言入门及安装
golang语言入门及安装 go语言是google在2009年发布的开源编程语言使用Go编译的程序可以媲美C或C++代码的速度,而且更加安全.支持并行进程. 本次讲解在windows上安装go语言的开 ...
- golang 闭包
说起golang闭包,在官方手册里面看过一次,没怎么用过,还是因为6哥经常用,阅读他的代码好多闭包,emmm,今天就学习一下. 在过去近十年时间里,面向对象编程大行其道,以至于在大学的教育里,老师也只 ...
- Golang Web入门(4):如何设计API
摘要 在之前的几篇文章中,我们从如何实现最简单的HTTP服务器,到如何对路由进行改进,到如何增加中间件.总的来讲,我们已经把Web服务器相关的内容大概梳理了一遍了.在这一篇文章中,我们将从最简单的一个 ...
- Golang闭包的坑
team leader 发现一个Golang程序的bug,是由不正确使用闭包引起.记载一下,以作备忘. 猜猜一下程序的结果: import ( "fmt" "time&q ...
- Golang Web入门(1):自顶向下理解Http服务器
摘要 由于Golang优秀的并发处理,很多公司使用Golang编写微服务.对于Golang来说,只需要短短几行代码就可以实现一个简单的Http服务器.加上Golang的协程,这个服务器可以拥有极高的性 ...
- Golang Web入门(2):如何实现一个高性能的路由
摘要 在上一篇文章中,我们聊了聊在Golang中怎么实现一个Http服务器.但是在最后我们可以发现,固然DefaultServeMux可以做路由分发的功能,但是他的功能同样是不完善的. 由Defaul ...
- Golang简单入门教程——函数进阶篇
本文始发于个人公众号:TechFlow,原创不易,求个关注 今天是golang专题的第八篇,我们来聊聊golang当中的函数. 我们在之前的时候已经介绍过了函数的基本用法,知道了怎么样设计或者是定义一 ...
随机推荐
- Python才排第8名!2018增速最快TOP 10编程语言盘点
在技术前沿的硅谷,开发者们不仅要学习多种热门的编程语言,还要时时盯着新的编程语言的崛起,生怕自己掉队. 作为世界最大开源软件社区,Github每年都会发布年度Octoverse报告,向大家展示年度最流 ...
- 我的Chrome插件
1.AdBlock 用来屏蔽广告,用过的人都说好. 2.Flash Block(Plus) 用来限制Flash的播放. 3.Flash Control 用来限制Flash的播放. 4.Full Pag ...
- 左右两栏div布局,高度自适应
页面结构如下: <div class="container"> <div class="left"> left </div> ...
- 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 ...
- 数据库页已标记为 RestorePending,可能表明磁盘已损坏。要从此状态恢复,请执行还原操作。
错误提示: 消息 829,级别 21,状态 1,第 1 行 数据库 ID 15,页 (1:21826) 已标记为 RestorePending,可能表明磁盘已损坏.要从此状态恢复,请执行还原操作. 引 ...
- Jenkins自动化构建(二)众多问题
1.反向代理设置有误 系统管理页面提示,反向代理设置有误,其实这是由于URL设置有问题: 打开系统管理-->系统设置-->URL Jenkins URL设置有问题,改一下,去掉jenkin ...
- time_t time()
time_t atime, btime; time(&atime); btime = time(0); 两种方式效果一样.
- JavaScript原型继承的实例
// 创建构造函数实例(获取DOM节点) <div id="app">测试字符</div>
- RRDtool 安装和使用
一.RRDtool 的功能及使用介绍 定义:RRDtool(Round Robin Database Tool)是一个用来处理定量数据的开源高性能数据库. 1.RRDtool 的特性 由于 RRDto ...
- Linux 运维测试及第三应用及测试工具
一 .第三方应用及测试工具链接地址 https://pan.baidu.com/s/1rLQ5NCZvxcy93YQ4fGFaBQ 1.linux LSI系列raid卡监测工具 1)使用参数详解链接: ...