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,设置动态响应格式
相关推荐
天远云服28 分钟前
Fintech硬核架构:解析天远贷前风险报告接口在Go微服务中的解析策略
微服务·架构·golang
Grassto1 小时前
Go 在哪里找第三方包?Module 查找顺序详解
开发语言·后端·golang
nbsaas-boot10 小时前
Go 项目中如何正确升级第三方依赖(Go Modules 实战指南)
开发语言·后端·golang
HashFlag1 天前
单元测试(go)
golang·单元测试
TDengine (老段)1 天前
TDengine Go 连接器入门指南
大数据·数据库·物联网·golang·时序数据库·tdengine·涛思数据
YGGP1 天前
【Golang】LeetCode 206. 反转链表
leetcode·链表·golang
YGGP1 天前
【Golang】LeetCode 142. 环状链表 II
leetcode·链表·golang
YGGP1 天前
【Golang】LeetCode 160. 相交链表
leetcode·链表·golang
YGGP1 天前
【Golang】LeetCode 234. 回文链表
leetcode·链表·golang
Tony Bai2 天前
Go 考古:Go 官方如何决定支持你的 CPU 和 OS?
开发语言·后端·golang