Go 协程 — 并发编程
goroutine:轻量级线程,go 关键字一行代码启动并发 · 难度:高级 · +20XP
goroutine — Go 的王牌特性
goroutine 是 Go 的轻量级协程。只需在函数前加 go 关键字就能启动并发执行。一个程序可以轻松运行上万个 goroutine。
启动 goroutine
func sayHello() {
fmt.Println("Hello")
}
// 顺序执行
sayHello() // 等待执行完才继续
// 并发执行
go sayHello() // 不等待,立即返回!
使用 sync.WaitGroup 等待完成
var wg sync.WaitGroup
for i := 0; i < 5; i++ {
wg.Add(1)
go func(n int) {
defer wg.Done()
fmt.Println("goroutine", n)
}(i)
}
wg.Wait() // 等待所有 goroutine 完成
goroutine vs JS 异步对比
| Go goroutine | JS async/await |
|---|---|
| 真正多核并发 | 单线程事件循环 |
| go func() 启动 | async function() 定义 |
| channel 通信 | Promise 链式调用 |