context 协程运行控制

简化对于处理单个请求的多个goroutine之间与请求域的数据、取消信号、截止时间等相关操作,这些操作可能涉及多个API调用
对服务器传入的请求应该创建上下文、而对服务器的传出调用应该接受上下文,他们之间的函数调用链必须传递上下文,
或者可以使用withChannel\withdeadline\withtimeout\withvalue创建的派生上下文。
当一个上下文被取消时,它派生的所有上下文也被取消
    
    
Deadline方法需要返回当前Context被取消的时间,也就是完成工作的截止时间
Done方法需要返回一个channel,这个channel会在当前工作完成或者上下文被取消之后关闭,多次调用Done会返回同一个channel
Err()会返回当前Context结束的原因,他只会再Done返回的channel被关闭时才会返回非空的值
   如果当前Context被取消就会返回Canceled错误
   如果当前Context超时就会返回DeadlineExecded错误
Value方法会从Context中返回键对应的值,对于同一个上下文来说,多次调用value并传入相同的key会返回相同的结果,该方法仅用于传递跨API和进程间跟请求域的数据。
   所提供的键必须是课比较的,并且不应该是string类型或任何其他内置类型,以避免使用上下文在包之间发生冲突。
   withvalue的用户应该为键定义自己的类型。为了避免在分配给interface时进行分配,上下文键通常具有具体类型struct{}
   或者,导出的上下文关键变量的静态类型应该是指针或接口
    

 

两个根节点
context.Background()
context.TODO()

四个方法
context.WithCancel()
context.WithTimeout()
context.WithDeadline()
context.WithValue()

 

posted @ 2020-01-27 16:05  慕沁  阅读(258)  评论(0)    收藏  举报