贝利信息

如何在Golang中使用goroutine实现并发_创建协程并执行异步任务

日期:2026-01-06 00:00 / 作者:P粉602998670
Go 中 goroutine 是轻量级并发单元,用 go 关键字启动;需用 sync.WaitGroup 等同步机制防止主 goroutine 提前退出导致其他协程被终止。

在 Go 中,goroutine 是轻量级的并发执行单元,由 Go 运行时管理,创建成本极低,适合高并发场景。使用 go 关键字即可启动一个 goroutine,它会异步执行函数调用,主线程无需等待。

启动 goroutine 的基本方式

只需在函数调用前加 go,该函数就会在新协程中运行:

注意:如果主 goroutine(main 函数)很快结束,其他 goroutine 可能被强制终止,因此常需同步机制控制生命周期。

等待 goroutine 完成:使用 sync.WaitGroup

当需要确保若干 goroutine 执行完毕后再继续,sync.WaitGroup 是最常用的方式:

立即学习“go语言免费学习笔记(深入)”;

示例:

func main() {
  var wg sync.WaitGroup
  for i := 0; i     wg.Add(1)
    go func(id int) {
      defer wg.Done()
      fmt.Printf("Task %d done\n", id)
    }(i)
  }
  wg.Wait()
}

安全传递数据:避免变量共享陷阱

循环中直接使用循环变量(如 for i := range items)启动 goroutine 时,容易因闭包捕获同一变量地址而引发竞态。解决方法:

配合 channel 实现异步通信与结果收集

goroutine 之间不建议直接共享内存,应通过 channel 通信。例如并发请求并汇总结果:

channel 天然支持同步,还能防止 goroutine 泄漏(若未接收,发送会阻塞),是构建可靠异步任务流的核心工具。