`
freshunter
  • 浏览: 15521 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

关于go语言的闭包

    博客分类:
  • go
go 
阅读更多
package main

import (
	"fmt"
)

func main() {
	var fs = [4]func(){}

	for i := 0; i < 4; i++ {
		defer fmt.Println("defer i = ", i)
		defer func() { fmt.Println("defer_closure i = ", i) }()
		fs[i] = func() { fmt.Println("closure i = ", i) }
	}

	for _, f := range fs {
		f()
	}
}

 这两天有时间学习了一下go语言。挺有趣的。

上面这段代码是关于closure和defer的用法。

go语言支持闭包,如果你在闭包函数中使用了上层函数的变量,那么这个变量的一个内存地址会记录到这个闭包中,当你调用这个闭包函数的时候,这个变量的值会直接去记录的内存地址里取,所以就得到了这个打印:

closure i =  4
closure i =  4
closure i =  4
closure i =  4
defer_closure i =  4
defer i =  3
defer_closure i =  4
defer i =  2
defer_closure i =  4
defer i =  1
defer_closure i =  4
defer i =  0

 

分享到:
评论

相关推荐

    深入理解Go语言中的闭包

    Go语言中的闭包 先看一个demo: func f(i int) func() int { return func() int { i++ return i } } 函数f返回了一个函数,返回的这个函数就是一个闭包。这个函数中本身是没有定义变量i的,而是引用了它所在的...

    举例讲解Go语言中函数的闭包使用

    主要介绍了Go语言中函数的闭包使用示例,函数闭包closure是编程语言中十分重要的特性,需要的朋友可以参考下

    简单了解Go语言中函数作为值以及函数闭包的使用

    Go编程语言提供灵活性,以动态创建函数,并使用它们的值。在下面的例子中,我们已经与初始化函数定义的变量。此函数变量的目仅仅是为使用内置的Math.sqrt()函数。下面是一个例子: 代码如下: package main import ...

    编程知识+GO语言开发+GO语言基础课程+系列课程

    本系列课程专为具有2-3年编程经验的开发者设计,旨在提供一个系统的Go语言学习路径。课程内容从Go语言基础到高级应用,再到实战项目开发,全面覆盖Go语言的核心概念、关键技术和最佳实践。 课程概览 基础入门:介绍...

    Go语言入门指南大纲及框架建议:轻松掌握Go语言学习秘诀.docx

    Go语言入门指南大纲及框架建议:轻松掌握Go语言学习秘诀 1. Go语言概述  Go语言的历史和创造者  Go语言的主要特性和优势  Go语言的应用领域 2. 安装与配置  在不同操作系统(Windows, macOS, Linux)上安装...

    Go语言超详细入门指南(入门必看)

    Go语言,又称Golang,是Google公司开发的一种静态强类型、编译型语言。它起源于2007年,并在2009年正式对外发布。Go语言的主要目标是兼具Python等动态语言的开发速度和C/C++等编译型语言的性能与安全性。Go语言设计...

    Golang mk教程-Go语言视频零基础入门到精通项目实战web编程

    第04天-基础-闭包、数组、切片、锁机制 第05天-进阶-排序、链表、二叉树、接口 第06天-进阶-接口与反射详解 第07天-进阶-接口实例、终端文件读写、异常处理 第08天-进阶-goroute详解、定时器与单元测试 第09天-高级-...

    Go语言程序设计中文版[人民邮电大学出版]

    8.1.4 处理Go语言二进制文件 307 8.1.5 处理自定义的二进制文件 309 8.2 归档文件 317 8.2.1 创建zip归档文件 317 8.2.2 创建可压缩的tar包 319 8.2.3 解开zip归档文件 321 8.2.4 解开tar归档文件 322...

    编程课程+GO语言编程+技术开发+系列课程

    本系列课程专为具备一定编程基础的中级开发者设计,旨在深入探索Go语言的各个方面,从而帮助学习者在云计算、微服务等热门技术领域中有效运用Go。课程内容全面,涵盖从Go语言基础到实战项目开发的全过程。 课程首先...

    Go 语言编程

    - Go 语言的前世今生 - Hello world - Go 特性介绍 - Go 基本数据类型 - 控制语句 - 函数 - 闭包 - 错误处理 - 结构体 - 面向对象 - 接口 - Goroutines - Channels - Select - Timeouts - Non-Blocking Channel - ...

    Go 语言程序设计

    8.1.4 处理Go语言二进制文件 307 8.1.5 处理自定义的二进制文件 309 8.2 归档文件 317 8.2.1 创建zip归档文件 317 8.2.2 创建可压缩的tar包 319 8.2.3 解开zip归档文件 321 8.2.4 解开tar归档文件 322...

    Go语言视频教学(4).txt

    ├─L004-Go语言 │ 01 Go开发1期 day4 课后作业讲解01.mp4.avi │ 02 Go开发1期 day4 课后作业讲解02.mp4.avi │ 03 Go开发1期 day4 内置函数-递归函数.mp4.avi │ 04 Go开发1期 day4 闭包.mp4.avi │ 05 Go开发1期...

    在Mac中搭建go语言开发环境的操作步骤

    Go语言是Google内部主推的语言,它作为一门全新的静态类型开发语言,与当前的开发语言相比具有许多令人兴奋不已的新特性。专门针对多处理器系统的应用程序编程进行了优化,使用go语言完全可以媲美c、c++的速度,而且...

    GO语言学习笔记(七、function)

    Go函数不支持嵌套、重载和默认参数 但支持以下特性: 无需声明原型、不定长度变参、多返回值、命名返回值参数、匿名函数、闭包 定义函数使用关键字func,且左大括号不能另起一行 函数也可以作为一种类型使用 闭包 ...

    Go-study:Go语言学习资料整理

    去学习笔记 目录及文件简介 src ├──你好 ...├─────func_callback.go以函数变量的形式定义函数,以闭包的形式定义函数 ├─────if_else.go条件分支格式书写 ├─────switch.goswi

Global site tag (gtag.js) - Google Analytics