Golang基础--context的用法
context包是go并发中常用的包,用于设置截至日期,同步信号,传递请求相关的值。
应用场景
每一个http请求的request都会启动一个goroutine处理这个请求,后续跟进的这个请求可能还需要访问数据库,做安全验证,访问控制,日志记录等,这时候就会
由最早的goroutine启动后续的多个goroutine,这样就会有多个goroutine处理一个request。而context的作用就是在这几个不同的goroutine之间同步特定数据,取消信
号,以及处理请求的截至日期。
定义
这里我列出了Context的接口代码,方便更加深入的讨论context的实现细节。
type Context struct{
Deadline() (deadtime time.Time,ok bool)
Done() <- chan struct{}
Err() error
Value(key interface{}) interface{}
}
- Deadline() :需要返回当前Context被取消的时间,也就是截止时间
- Done():需要返回一个channel,该channel会在工作完成或者Context被取消时关闭,多次调用Done()方法返回的是同一个channel
- Err():用于返回当前Context结束的原因
- Value():用于取得当前Context绑定的值