goroutine是Go运行时管理的轻量级线程,用go关键字在新协程中执行函数或方法,如go functionName()、go instance.Method()或go func(){}(),示例中启动sayHello函数并发执行,需注意主协程结束会终止所有未完成goroutine,应使用sync.WaitGroup或channel进行同步以避免数据竞争。

在 Go 语言中,使用 go 关键字来启动一个协程(goroutine)。
什么是 goroutine?
goroutine 是 Go 运行时管理的轻量级线程。你可以把它理解为一个并发执行的任务。与操作系统线程相比,goroutine 的创建和销毁成本更低,支持高并发场景。
如何使用 go 关键字启动协程?
只需在函数或方法调用前加上 go 关键字,即可让该函数在一个新的 goroutine 中运行。
- go functionName():启动一个普通函数作为协程
- go instance.Method():启动一个方法作为协程
- go func() { … }():启动一个匿名函数作为协程
示例代码:
立即学习“go语言免费学习笔记(深入)”;
package main <p>import ( "fmt" "time" )</p><p>func sayHello() { fmt.Println("Hello from goroutine") }</p><p>func main() { // 启动一个 goroutine 执行 sayHello 函数 go sayHello()</p><pre class="brush:php;toolbar:false;"><pre class="brush:php;toolbar:false;">// 主协程等待片刻,确保上面的 goroutine 有机会执行 time.Sleep(100 * time.Millisecond) fmt.Println("Main function ends")
}
注意事项
启动 goroutine 后,主程序不会等待它完成,除非你显式同步(例如使用 sync.WaitGroup 或通道 channel)。
- 如果 main 函数结束,所有未执行完的 goroutine 都会被终止
- 避免在没有同步机制的情况下依赖 goroutine 完成工作
- 注意数据竞争问题,多个 goroutine 访问共享变量时需加锁或使用 channel
基本上就这些。使用 go 关键字非常简单,但合理管理生命周期和通信才是关键。


