go routine context
是的,在 Go 中,context 是一种用于在父级和子级之间传递取消信号和截止时间的机制。当父级上下文被取消时,所有从该上下文派生的子级上下文也会被取消。
工作原理
-
创建上下文:
- 使用
context.WithCancel(parent)、context.WithTimeout(parent, timeout)或context.WithDeadline(parent, deadline)创建子上下文。
- 使用
-
取消传播:
- 如果父级上下文被取消,子级上下文会自动收到取消信号。
- 子级上下文可以通过
<-ctx.Done()通道监听取消事件。
-
示例:
package main
import (
"context"
"fmt"
"time"
)
func main() {
parentCtx, cancel := context.WithCancel(context.Background())
childCtx, _ := context.WithCancel(parentCtx)
go func() {
<-childCtx.Done()
fmt.Println("Child context canceled")
}()
time.Sleep(1 * time.Second)
cancel() // 取消父级上下文
time.Sleep(1 * time.Second)
}
输出
Child context canceled
注意事项
- 子级上下文也可以自行取消,不会影响父级上下文。
- 使用上下文时,确保在不再需要时调用取消函数,以避免资源泄漏。