GO——context

作用

参考:https://lailin.xyz/post/go-training-week3-context.html

  • 在多个goroutine中设置截止日期、同步信号、传递请求相关值的
    • 设置截止日期,或进行超时控制,deadline()
    • 同步信号,done()
    • 传递请求相关值,value()
  • 注意点

是什么

上下文

组成

复制代码
type Context interface {
    Deadline() (deadline time.Time, ok bool)
    Done() <-chan struct{}
    Err() error
    Value(key interface{}) interface{}
}
  • deadline
    • 返回的第一个值是 截止时间,到了这个时间点,Context 会自动触发 Cancel 动作。返回的第二个值是 一个布尔值,true 表示设置了截止时间,false 表示没有设置截止时间,如果没有设置截止时间,就要手动调用 cancel 函数取消 Context
  • done
    • 返回一个只读的通道(只有在被cancel后才会返回),类型为 struct{}。当这个通道可读时,意味着parent context已经发起了取消请求,根据这个信号,开发者就可以做一些清理动作,退出goroutine
  • err
    • 返回 context 被 cancel 的原因
  • value
    • 返回被绑定到 Context 的值,是一个键值对,所以要通过一个Key才可以获取对应的值,这个值一般是线程安全的

存在原因

协程关闭原因

  • goroutine自己跑完
    • 正常结束
  • 主进程crash,goroutine被迫退出
    • 异常关闭,需要优化代码
  • 通过通道信号,引导协程关闭
    • 开发者手动控制

gin.context和context.context区别

  • 参考:https://www.coder.work/article/1025918
  • gin.context实现了context.context接口
  • gin.context里面包含
    • request请求头
    • writer响应
    • params参数
    • keys,自定义参数
    • error,错误信息
    • accepted,设置动态响应格式
相关推荐
浮尘笔记7 小时前
Go语言临时对象池:sync.Pool的原理与使用
开发语言·后端·golang
Clarence Liu11 小时前
AI Agent开发(2) - 深入解析 A2A 协议与 Go 实战指南
开发语言·人工智能·golang
源代码•宸18 小时前
Golang原理剖析(defer、defer面试与分析)
开发语言·经验分享·后端·面试·golang·defer·开放编码
且去填词19 小时前
三色标记法与混合写屏障:Go GC 垃圾回收全流程解析
开发语言·算法·golang·三色标记法·gogc·屏障技术
源代码•宸20 小时前
Golang原理剖析(context、context面试与分析)
开发语言·后端·算法·面试·golang·context·emptyctx
源代码•宸20 小时前
Golang原理剖析(interface)
服务器·开发语言·后端·golang·interface·type·itab
汪碧康21 小时前
一文掌握k8s容器的资源限制
docker·云原生·容器·golang·kubernetes·k8s·xkube
moxiaoran57531 天前
Go语言的错误处理
开发语言·后端·golang
CTO Plus技术服务中2 天前
一栈式、系统性的C、C++、Go、网络安全、Linux运维开发笔记和面试笔记
c++·web安全·golang
modelmd2 天前
Go、Java 的值类型和引用类型对比
java·golang