golang之匿名函数

简介: 1 package main 2 3 import "fmt" 4 5 /* squares返回一个匿名函数 6 * 该匿名函数每次调用返回下一个数的平方 7 * func name(parameter-list) (result-list) { 8 * ...
 1 package main
 2 
 3 import "fmt"
 4 
 5 /* squares返回一个匿名函数
 6  * 该匿名函数每次调用返回下一个数的平方
 7  * func name(parameter-list) (result-list) {
 8  *     body
 9  * }
10  */
11 
12 func squares() func() int {
13     var x int
14     return func() int {
15         x++
16         return x * x
17     }
18 }
19 
20 func main() {
21     f := squares() //返回函数指针
22     fmt.Printf("%v\n", f)
23     fmt.Println(f())
24     fmt.Println(f())
25     fmt.Println(f())
26     fmt.Println(f())
27     fmt.Printf("%v\n", f)
28 }

执行结果:

1 0x401620
2 1
3 4
4 9
5 16
6 0x401620

   通过这个例子, 我们看到变量的生命周期不由它的作用域决定:squares返回后, 变量x仍然隐式的存在于f中;

 

相关文章
|
存储 缓存 Go
【Golang之路】——匿名函数和闭包
【Golang之路】——匿名函数和闭包
148 0
|
Go
Golang匿名函数与闭包
Golang匿名函数与闭包
80 0
|
3月前
|
Go
Golang语言之管道channel快速入门篇
这篇文章是关于Go语言中管道(channel)的快速入门教程,涵盖了管道的基本使用、有缓冲和无缓冲管道的区别、管道的关闭、遍历、协程和管道的协同工作、单向通道的使用以及select多路复用的详细案例和解释。
121 4
Golang语言之管道channel快速入门篇
|
3月前
|
Go
Golang语言文件操作快速入门篇
这篇文章是关于Go语言文件操作快速入门的教程,涵盖了文件的读取、写入、复制操作以及使用标准库中的ioutil、bufio、os等包进行文件操作的详细案例。
67 4
Golang语言文件操作快速入门篇
|
3月前
|
Go
Golang语言之gRPC程序设计示例
这篇文章是关于Golang语言使用gRPC进行程序设计的详细教程,涵盖了RPC协议的介绍、gRPC环境的搭建、Protocol Buffers的使用、gRPC服务的编写和通信示例。
106 3
Golang语言之gRPC程序设计示例
|
3月前
|
安全 Go
Golang语言goroutine协程并发安全及锁机制
这篇文章是关于Go语言中多协程操作同一数据问题、互斥锁Mutex和读写互斥锁RWMutex的详细介绍及使用案例,涵盖了如何使用这些同步原语来解决并发访问共享资源时的数据安全问题。
89 4
|
3月前
|
Go
Golang语言错误处理机制
这篇文章是关于Golang语言错误处理机制的教程,介绍了使用defer结合recover捕获错误、基于errors.New自定义错误以及使用panic抛出自定义错误的方法。
51 3
|
3月前
|
Go 调度
Golang语言goroutine协程篇
这篇文章是关于Go语言goroutine协程的详细教程,涵盖了并发编程的常见术语、goroutine的创建和调度、使用sync.WaitGroup控制协程退出以及如何通过GOMAXPROCS设置程序并发时占用的CPU逻辑核心数。
55 4
Golang语言goroutine协程篇
|
3月前
|
Prometheus Cloud Native Go
Golang语言之Prometheus的日志模块使用案例
这篇文章是关于如何在Golang语言项目中使用Prometheus的日志模块的案例,包括源代码编写、编译和测试步骤。
58 3
Golang语言之Prometheus的日志模块使用案例