go 闭包程序解读
package main
import "fmt"
// 下面这函数就是闭包函数(就是返回一个匿名函数的地址的函数,其中要1.定义一个需要保护的局部变量i 2.一个匿名的函数) ,实现计数的功能
func Counter() func() int {
i := 0
res := func() int {
i++
return i
}
fmt.Println("Counter内部:", res) //0x49d5d0是匿名函数的地址 res就是func() int这个匿名函数
fmt.Printf("%T\n", res) //res 的类型就是函数形 func() int
fmt.Printf("%T\n", res()) //res()是执行匿名函数,执行完返回值是1(int)
fmt.Println("res():", res()) //打印是2的原因是res()是执行匿名函数,执行一次,匿名函数中的变量就运算一次且运行完后变量不被清理
fmt.Println("res():", res()) //这是第三次运行函数res()
return res //Counter函数返回的是 匿名函数的地址
}
func main() {
res1 := Counter() //执行Counter() 然后将返回值赋值给res1 ,res1 就是func() int类型变量
fmt.Printf("%T\n", res1) // res1 := Counter() res1就是函数名,res1 = func()int
fmt.Printf("%T\n", res1()) // res1()是执行func()int匿名函数,那么返回是Int
fmt.Println("res1():", res1) // 打印的地址和上面一样
fmt.Println("res1():", res1()) //这是第5次运行函数res() 5
fmt.Println("res1():", res1()) //这是第6次运行函数res() 6
res2 := Counter()
fmt.Println("res2():", res2) // 内存地址不发生改变 和res1一致
fmt.Println("res2():", res2()) // 但是重新进入了一次闭包函数 故i变量从0重新赋值了一遍
fmt.Println("res2():", res2())
}

go 闭包程序解读的更多相关文章
- CYPEESS USB3.0程序解读之---GPIO
CPRESS 官方给出的SDK1.1中(目前最新的SDK),提供了大量的例程供我们开发软件的时候作参考,就像STM32的开发一样提供了库一样,但是又不是库,仅仅是参考例程. 首先看一个简单一点的GPI ...
- CYPEESS USB3.0程序解读之---同步FIFO(slaveFifoSync)
上一篇文章解读了CYPRESS FX3的GPIO的操作过程,下面解读同步FIFO的一个例子(slaveFifoSync). *生产者,消费者. 1.首先看DMA的回调函数(cyu3dma.h): ty ...
- matlab示例程序--Motion-Based Multiple Object Tracking--卡尔曼多目标跟踪程序--解读
静止背景下的卡尔曼多目标跟踪 最近学习了一下多目标跟踪,看了看MathWorks的关于Motion-Based Multiple Object Tracking的Documention. 官网链接:h ...
- C#程序解读
阅读下面程序,请回答如下问题: 问题1:这个程序要找的是符合什么条件的数? 问题2:这样的数存在么?符合这一条件的最小的数是什么? 问题3:在电脑上运行这一程序,你估计多长时间才能输出第一个结果?时间 ...
- JS之闭包详细解读
闭包在红宝书中的解释就是:有权访问另一个函数作用域中的变量的函数. 1.变量作用域 全局变量:所有的函数外部定义的变量,它的作用域是整个script. 局部变量:定义在函数体内部的变量,作用域仅限于函 ...
- 【Arduino学习笔记02】第一个Arduino项目——点亮LED Blink.ino程序解读 Arduino程序基本结构 pinMode() digitalWrite() delay()
/* Blink Turns an LED on for one second, then off for one second, repeatedly. */// define variables ...
- MyBatis最初的程序解读---API
API详解: * 线程安全问题出现的条件 (1) 只有单例对象才可能出现线程安全问题 (2) 多线程环境,即多个线程会共享这个单例对象 ...
- CYPEESS USB3.0程序解读之---SPI读写
前面已经解读了GPIO以及同步FIFO操作,下面我们看一个SPI读写的例子,它是主程序命令从SPI中读写一些数据. SPI传输子程序看一下: 页地址,字节计数,缓冲区,读写标志 因为只能一页一页的读或 ...
- Javascript的那些硬骨头:作用域、回调、闭包、异步……
终于到了神话破灭的时刻-- 这注定是一篇"自取其辱"的博客,飞哥,你们眼中的大神,Duang,这次脸朝下摔地上了. 故事得从这个求助开始:e.returnValue 报错:未定义, ...
随机推荐
- 能ping通虚拟机,但snmp报文 Destination unreachable(Host administratively prohibited
如题目,使用virtual box 虚拟机,虚拟机系统为centos6.5, 主机系统为win10 内外设置ip在同一网段后,互相能ping通,centos 系统开启snmp服务,此处说明以下, sn ...
- Java使用volatile实现多线程输出ABC共10次
问题 有A,B,C三个线程, A线程输出A, B线程输出B, C线程输出C.要求,同时启动三个线程, 按顺序输出ABC, 循环10次. 今天在写多线程的时候找例子,见到了这样一个题,觉得不难,但是在网 ...
- 2017 百度杯丶春秋欢乐赛 writeup
1. 内涵图(Misc) 题目: 我不是一个简单的图片 我是一个有内涵的图片 解:保存到桌面,右键属性->详细信息,即可获得flag. 2. 小电影(Misc) 题目: 我说过 这次比赛是让大家 ...
- uml类图关系
原文地址http://www.jfox.info/uml-lei-tu-guan-xi-fan-hua-ji-cheng-shi-xian-yi-lai-guan-lian-ju-he-zu-he 在 ...
- Vue父组件向子组件传递一个动态的值,子组件如何保持实时更新实时更新?
原文:https://blog.csdn.net/zhouweixue_vivi/article/details/78550738 2017年11月16日 14:22:50 zhouweixue_vi ...
- python接口自动化-get请求
一.环境安装 1.用pip安装requests模块 >>pip install requests 二.get请求 1. url 1.1: response 的返回内容还有很多信息,例 ...
- Vue-异步组件
一般情况下,在代码开头引入组件: import Vue from 'vue' import Router from 'vue-router' import Home from '@/pages/hom ...
- Spring Security Oauth2 的配置
使用oauth2保护你的应用,可以分为简易的分为三个步骤 配置资源服务器 配置认证服务器 配置spring security 前两点是oauth2的主体内容,但前面我已经描述过了,spring sec ...
- 用JS解决url地址中参数乱码的问题
var url = window.location.herf;//获取url地址 var obj = {}; //最后输出的对象 var reg = /\?/; //要匹配的正则表达式 if(url. ...
- js模块化世界
前言 我们经常见到 一些这样的写法,require('xxx').import xx from '../components/data'.export const data....也听见一些这样的说法 ...