在Goroutine中,Context可以用来管理和控制Goroutine的生命周期。Context提供了一种方式来跨越多个Goroutine传递请求范围的值,例如请求的截止日期、取消信号和跟踪请求的ID等。
Context的使用非常简单,只需要在需要传递Context的地方使用WithContext()函数创建一个新的Context对象,然后在调用函数或启动新的Goroutine时传递Context对象即可。通过WithCancel()函数可以创建一个可取消的Context对象,在Context对象取消时会自动取消Context对象关联的Goroutine。
以下是一个示例代码:
func main() {
ctx, cancel := context.WithCancel(context.Background())
go func() {
select {
case <-time.After(3 * time.Second):
fmt.Println("Goroutine completed")
case <-ctx.Done():
fmt.Println("Goroutine cancelled")
}
}()
time.Sleep(1 * time.Second)
cancel()
time.Sleep(1 * time.Second)
}
在上面的代码中,我们创建了一个可取消的Context对象,并启动了一个Goroutine,其中包含了一个select语句来监听Goroutine的执行状态。在主函数中,我们等待1秒钟后调用cancel()函数来取消Context对象关联的Goroutine。在输出日志后,程序会继续执行,不会因为Goroutine的中止而中止。