Skip to main content

23. 并发控制:Go 关键字

Goroutine 是 Golang 最强大的特性之一,Yak 完美继承了这一特性。

Yak 脚本与 Golang 的 Go 的作用都是相同的,但是需要注意一点的是,go 关键字可以用来调用 yak 的闭包函数

基本用法#

在 Golang 中,我们启动一个 Goroutine 通过以下操作启动

go func(){    // ...do some codes}()

在 yak 中,我们不仅兼容了上述写法,我们执行如下命令,都是等效的

//  goroutine 启动来函数异步调用go func(){    /* do sth */}() // 兼容 Go 的写法
go fn(){    /* do sth */}() // 也可以使用fn关键字代替func关键字
go def(){    /* do sth */}()  // 兼容 Python 定义方法的关键字
// 定义无参闭包函数并立即执行 Goroutinego fn{    /* do sth */}
go func{    /* do sth */}
go def{    /* do sth */}

并发控制#

yaklang可以非常自然的使用go的waitGroup,来完成协程的并发控制。

wg = sync.NewWaitGroup()wg.Add(2)
go func {    defer wg.Done()    println("in goroutine1")}
go func {    defer wg.Done()    println("in goroutine2")}
wg.Wait()