Go Context


原文链接: Go Context

Go context

参考文章列表:

  1. golang服务器开发利器 context用法详解
  2. Go语言并发模型:使用 context
  3. 使用Golang的Context管理上下文
    Golang Context | King`s博客
    快速掌握 Golang context 包,简单示例 | Deepzz's Blog
    go context包源码分析 - 简书

    阅读前提

  4. refer 1中,本文主要基于官方文档Go Concurrency Patterns: Context以及视频(Advanced Go Concurrency Patterns)[https://www.youtube.com/watch?v=QDDwwePbDtw]的学习而得。

  5. refer 2 中涉及: 本文内容涉及到了 done channel,如果你不了解这个概念,那么请先阅读 "Go语言并发模型:像Unix Pipe那样使用channel"。 Go语言并发模型:像Unix Pipe那样使用channel

context 上下文:


context不仅可以控制并发逻辑,而且本身也可以携带变量,类似于Map。并且提供Value方法用于获取指定Key的Value值.
context包,可以轻松地将 请求范围的值,取消信号以及截止时间跨越API边界传递到处理请求所涉及的所有参数
Context之间是具有父子关系的,新的Context往往从已有的Context中创建, 因此,最终所有的context组成一颗树状的结构.
context包中提供一个创建初始Context的方法: func Background() Context.Backgraund()就是所有context树的根。
WithCancel和WithTimeout两个方法用于在已有的context上创建新的context,同时从新的context中可以获取到旧的context中保存的Key,Value

context可以被多个并发的Goroutine使用,对context的访问是并发安全的

c.Abort()只是设置了一些内部标志,标志着上下文以某种方式表明异常终止。 但是在后续中间件中可以根据Isabort() 判断,从而进行 C.Json(500,"") 返回一些error信息

gin 从panic中恢复: 加middleware避免的panic导致的进程中止 RecoveryWithWriter returns a middleware for a given writer that recovers from any panics and writes a 500 if there was one.

`