Skip to main content

go routine context

是的,在 Go 中,context 是一种用于在父级和子级之间传递取消信号和截止时间的机制。当父级上下文被取消时,所有从该上下文派生的子级上下文也会被取消。

工作原理

  1. 创建上下文

    • 使用 context.WithCancel(parent)context.WithTimeout(parent, timeout)context.WithDeadline(parent, deadline) 创建子上下文。
  2. 取消传播

    • 如果父级上下文被取消,子级上下文会自动收到取消信号。
    • 子级上下文可以通过 <-ctx.Done() 通道监听取消事件。
  3. 示例

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

注意事项

  • 子级上下文也可以自行取消,不会影响父级上下文。
  • 使用上下文时,确保在不再需要时调用取消函数,以避免资源泄漏。