Go语言中,协程(goroutine)通过go关键字实现轻量级并发,启动函数独立执行,需注意主协程等待、共享变量同步及循环变量捕获问题,常用sync.WaitGroup协调多个协程完成任务。

在Go语言中,协程(goroutine)是实现并发编程的核心机制。它比操作系统线程更轻量,启动和销毁的开销小,适合处理大量并发任务。使用 go 关键字可以轻松创建一个协程,让函数在独立的执行流中运行。
只需在函数调用前加上 go,即可启动一个协程:
go functionName()例如:
package mainimport ( "fmt" "time" )
func sayHello() { fmt.Println("Hello from goroutine") }
func main() { go sayHello() // 启动协程 time.Sleep(100 * time.Millisecond) // 等待协程执行 fmt.Println("Main function") }
输出可能是:
立即学习“go语言免费学习笔记(深入)”;
Hello from goroutine Main function注意:如果没有 time.Sleep,主程序可能在协程执行前就退出了,导致看不到输出。
你也可以通过匿名函数的方式启动协程,适用于需要传参或临时逻辑的场景:
go func(msg string) { fmt.Println(msg) }("Hello inline goroutine")这种方式常用于一次性任务,避免定义额外函数。
多个协程并发执行时,主函数无法自动等待它们完成。常见做法是使用 sync.WaitGroup:
package mainimport ( "fmt" "sync" "time" )
func worker(id int, wg *sync.WaitGroup) { defer wg.Done() // 任务完成,通知WaitGroup fmt.Printf("Worker %d starting\n", id) time.Sleep(time.Second) fmt.Printf("Worker %d done\n", id) }
func main() { var wg sync.WaitGroup
for i := 1; i <= 3; i++ {
wg.Add(1)
go worker(i, &wg)
}
wg.Wait() // 等待所有协程完成
fmt.Println("All workers done")}
输出:
Worker 1 starting Worker 2 starting Worker 3 starting Worker 1 done Worker 2 done Worker 3 done All workers done使用协程时需注意以下几点:
基本上就这些。go关键字让并发变得简单,但合理管理协程生命周期和共享资源才是写出稳定程序的关键。
以上就是如何创建Golang协程 go关键字使用基础的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号