golang context的概念和使用方法
什么是context?
请求Go服务器的各request通过不同的goroutine来处理
request的handle可以访问DB或者RPC等
保存请求过程中的token,request期限等
request超时的时候,释放资源
可以把request作用域的值全部传给goroutine的context包
使用方法
主要的使用场景有两种:
传递request作用域的值
cancel取消
context.Context interface
goblog说明概要:
content取消,超时的时候返回关闭的通道的Done()
通过Err() error结构体返回,为什么Done通道关闭了
Deadline设定了的场合,返回Deadline的Deadline()
返回通过key保管的值
生成
通过下面两种发发可以生成
通过http.Request.Context()也可以获得
Background()
基本上都通过这种获取
TODO()
不知道是否要使用但是不想传nil,那么就用这个方法。
行为上和Background一样,返回一个空的context
request作用域的值的传播
不要把什么信息都放到里面,按照最小需求把认证和Deadlin的信息放进去即可。
Set值 WithValue()
Get值 Value()
取消处理
WithCancel(parent Context) (ctx Context,cancel CancelFunc)
父context传递给子context的话,子的context和cancel方法
第二个返回值CancelFunc可以取消子的context
WithTimeout
第二个参数如果指定的话,经过了这些时间就会执行取消处理
WithDeadline
和WithTimeout基本相同,不是经过多久,而是截止到什么时候取消。
例子
执行结果:
写这个文章是参照了下面这个页面:
https://qiita.com/marnie_ms4/items/985d67c4c1b29e11fffc