欢迎光临散文网 会员登陆 & 注册

golang context的概念和使用方法

2023-04-14 18:33 作者:daxiavip  | 我要投稿

什么是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

golang context的概念和使用方法的评论 (共 条)

分享到微博请遵守国家法律