go 匿名函数闭包协程(goroutine)Pipeline

slug
golang-anonymous-functio-closure-goroutine-pipeline
date
May 21, 2024
tags
技术&产品
summary
golang 匿名函数和闭包协程pipeline使用
type
Post
status
Published
Last edited time
May 25, 2024 07:12 AM

缘起

由于工作原因使用项目管理工具 Jira,项目中需要统计一些数据方便管理,例如统计每个人的工作量或者将子任务和故事平铺展示,可以实现的方案有:
  1. 购买插件
  1. 自己开发Jira 插件
  1. 使用 Jira API 统计
  1. 只连 Jira 数据库统计
我选择的通过Jira API 进行数据统计。流程为通过 Jira API 执行 JQL 查询数据,在 go 中进行数据处理,例如统计。JQL 的查询不能关联查询,例如我要统计 Story 的信息和 Story 子任务的信息,需要分两次查询,当一个 Sprint 下 Story 多的时候,执行效率会下降。如何使用 go 语言的特性 协程 来提升效率?

匿名函数Anonymous functions(lambda)和闭包closure

closure is the combination of a function bundled together (enclosed) with references to its surrounding state (the lexical environment). In other words, a closure gives you access to an outer function's scope from an inner function. 
匿名函数:没有定义名字的函数
闭包:匿名函数中使用了外部变量则为闭包

goroutine

调用函数时加上关键字 go ,则执行时启动一个新的 coroutine 来执行, 上面的匿名函数
如果直接执行,实际可能没有被执行到,因为没有等 coroutine 执行完,主线程就已经退出了。主线程需要和协程进行通信。

Channel类型

定义

(chan| chan <- | <- chan) 类型
箭头:指向 chan, 只能接收数据;chan 在后, chan 吐数据,输出数据。无箭头,可发送可接收
例如:
chan -< int 可以接收 int 的 channel
-< chan int 可以发送 int 的channel
使用时用make 进行初始化,同时支持容量的设置。

阻塞

无缓冲下的channel,读和写都会阻塞;

select

sync.WaitGroup

 

© JimYan 2023 - 2024