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绑定的值

 

posted @ 2023-05-14 16:49  99号的格调  阅读(36)  评论(0编辑  收藏  举报