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,项目中需要统计一些数据方便管理,例如统计每个人的工作量或者将子任务和故事平铺展示,可以实现的方案有:
- 购买插件
- 自己开发Jira 插件
- 使用 Jira API 统计
- 只连 Jira 数据库统计
我选择的通过Jira API 进行数据统计。流程为通过 Jira API 执行 JQL 查询数据,在 go 中进行数据处理,例如统计。JQL 的查询不能关联查询,例如我要统计 Story 的信息和 Story 子任务的信息,需要分两次查询,当一个 Sprint 下 Story 多的时候,执行效率会下降。如何使用 go 语言的特性
协程
来提升效率?匿名函数Anonymous functions(lambda)和闭包closure
A 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,读和写都会阻塞;