Go语言的context
包是一个用于在Go应用程序中传递请求范围的值、取消信号、截止时间等信息的工具。它提供了一种简单而强大的方式来管理多个goroutine之间的上下文。以下是Go语言context
的最佳实践教程:
导入
context
包:import ( "context" )
创建根上下文:
func main() { // 创建一个根上下文 ctx := context.Background() }
创建子上下文:
func main() { // 创建一个根上下文 ctx := context.Background() // 创建一个子上下文,超时时间为5秒 ctx, cancel := context.WithTimeout(ctx, 5*time.Second) defer cancel() // 在函数返回前取消子上下文 }
使用父级上下文:
func main() { // 创建一个根上下文 ctx := context.Background() // 创建一个子上下文,超时时间为5秒 ctx, cancel := context.WithTimeout(ctx, 5*time.Second) defer cancel() // 在函数返回前取消子上下文 // 创建一个新的作用域,继承自父级上下文 childCtx := context.WithValue(ctx, "key", "value") }
使用
context
包中的其他功能:
context.TODO()
:创建一个空的上下文,通常用于占位符或临时用途。context.Deadline()
:创建一个具有截止时间的上下文。当截止时间到达时,该上下文将自动被取消。context.Done()
:返回一个通道,当上下文被取消时,该通道将被关闭。可以使用select
语句来等待上下文完成或取消。context.Err()
:返回上下文的错误信息,如果上下文没有错误,则返回nil。