golang中的闭包

简介: golang中的闭包

公众号merlinsea


  • 闭包
  • 闭包是由函数及其引用的环境组合而成的实体(闭包=函数+引用环境)
  • golang中实现闭包如下所示,可以发现AddUpper()方法的返回结果是一个匿名函数,同时这个匿名函数引用了函数AddUpper()中的局部变量n和str,因此匿名函数和局部变量n和str构成了闭包
  • golang可以识别出哪些闭包环境中的变量,针对这些变量会在堆上分配,因此每次n=n+x以后新的n值会长期保存起来,下次再调用f函数的时候,会用新的n和str值。

640.jpg


  • golang中典型的闭包使用举例
  • sort包下的SearchInts()方法


640.png


  • 协程
  • golang中的开启一个协程以后,主线程会继续往下执行,当主线程执行结束的时候,所有由这个主线程开启的协程也会被结束。


640.png



  • goroutine的调度模型 ——MPG模式
  • M:操作系统的主线程(是物理线程)
  • P:协程执行需要的上下文环境
  • G:协程(是一种轻量级线程,即在用户态空间创建,不需要转为内核态)
  • MPG的工作模式
  • 程序可能有多个主线程在执行,如果这些M都挂在多个cpu上执行则是并行,如果是挂在一个cpu上执行则是并发
  • 上下文环境P可以根据实际情况开启一个协程G去工作,如果开启了多个协程G,这些写协程以队列的形式挂在P的上下文环境下
  • 当主线程正在执行的协程G阻塞的时候,go会有一种机制将挂在主线程下等待执行的其他协程分配给其他主线程继续执行。

640.jpg



golang版本永久算法题训练营~~

奔跑的小梁,公众号:梁霖编程工具库
算法训练营golang专题刷题来啦!!!!

鱼皮编程导航的优惠券,扫码即可领取

公众号:梁霖编程工具库
今天我加入鱼皮知识新球了!!


相关文章
|
缓存 Java Serverless
Golang中的闭包详解
Golang中的闭包详解
|
存储 缓存 Go
【Golang之路】——匿名函数和闭包
【Golang之路】——匿名函数和闭包
152 0
|
Go
Golang匿名函数与闭包
Golang匿名函数与闭包
80 0
|
3月前
|
Go
Golang语言之管道channel快速入门篇
这篇文章是关于Go语言中管道(channel)的快速入门教程,涵盖了管道的基本使用、有缓冲和无缓冲管道的区别、管道的关闭、遍历、协程和管道的协同工作、单向通道的使用以及select多路复用的详细案例和解释。
125 4
Golang语言之管道channel快速入门篇
|
3月前
|
Go
Golang语言文件操作快速入门篇
这篇文章是关于Go语言文件操作快速入门的教程,涵盖了文件的读取、写入、复制操作以及使用标准库中的ioutil、bufio、os等包进行文件操作的详细案例。
70 4
Golang语言文件操作快速入门篇
|
3月前
|
Go
Golang语言之gRPC程序设计示例
这篇文章是关于Golang语言使用gRPC进行程序设计的详细教程,涵盖了RPC协议的介绍、gRPC环境的搭建、Protocol Buffers的使用、gRPC服务的编写和通信示例。
108 3
Golang语言之gRPC程序设计示例
|
3月前
|
安全 Go
Golang语言goroutine协程并发安全及锁机制
这篇文章是关于Go语言中多协程操作同一数据问题、互斥锁Mutex和读写互斥锁RWMutex的详细介绍及使用案例,涵盖了如何使用这些同步原语来解决并发访问共享资源时的数据安全问题。
95 4
|
3月前
|
Go 调度
Golang语言goroutine协程篇
这篇文章是关于Go语言goroutine协程的详细教程,涵盖了并发编程的常见术语、goroutine的创建和调度、使用sync.WaitGroup控制协程退出以及如何通过GOMAXPROCS设置程序并发时占用的CPU逻辑核心数。
56 4
Golang语言goroutine协程篇