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

在Go语言中,协程(goroutine)是实现并发编程的核心机制。它比操作系统线程更轻量,启动和销毁的开销小,适合处理大量并发任务。使用 go 关键字可以轻松创建一个协程,让函数在独立的执行流中运行。
go关键字的基本用法
只需在函数调用前加上 go,即可启动一个协程:
go functionName()
例如:
package main
import (“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 goroutineMain function
注意:如果没有 time.Sleep,主程序可能在协程执行前就退出了,导致看不到输出。
协程与匿名函数
你也可以通过匿名函数的方式启动协程,适用于需要传参或临时逻辑的场景:
go func(msg string) { fmt.Println(msg)}(“Hello inline goroutine”)
这种方式常用于一次性任务,避免定义额外函数。
协程间的协作与同步
多个协程并发执行时,主函数无法自动等待它们完成。常见做法是使用 sync.WaitGroup:
package main
import (“fmt””sync””time”)
func worker(id int, wg *sync.WaitGroup) {defer wg.Done() // 任务完成,通知WaitGroupfmt.Printf(“Worker %d startingn”, id)time.Sleep(time.Second)fmt.Printf(“Worker %d donen”, 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 startingWorker 2 startingWorker 3 startingWorker 1 doneWorker 2 doneWorker 3 doneAll workers done
注意事项
使用协程时需注意以下几点:
主协程退出后,其他协程也会被强制终止协程之间共享变量时,要注意数据竞争,必要时使用互斥锁(sync.Mutex)不要依赖协程的执行顺序,它们是并发调度的避免在循环中直接使用循环变量,应传参避免闭包问题
基本上就这些。go关键字让并发变得简单,但合理管理协程生命周期和共享资源才是写出稳定程序的关键。
以上就是如何创建Golang协程 go关键字使用基础的详细内容,更多请关注创想鸟其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1399844.html
微信扫一扫
支付宝扫一扫