ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
[TOC] ## **1.概述** `context`,专门用来简化对于处理单个请求的多个goroutine之间与请求域的数据、取消信号、截止时间等相关操作。 对服务器传入的请求应该创建上下文,而对服务器的传出调用应该接受上下文。它们之间的函数调用链必须传递上下文,或者可以使用`WithCancel`、`WithDeadline`、`WithTimeout`或`WithValue`创建的派生上下文。当一个上下文被取消时,它派生的所有上下文也被取消。 ## **2.Contex接口** ~~~ type Context interface { Deadline() (deadline time.Time, ok bool) Done() <-chan struct{} Err() error Value(key any) any } ~~~ * Deadline方法返回当前Context被取消的时间,也就是完成工作的截止时间; * Done方法返回一个Channel,这个Channel会在当前工作完成或者上下文被取消之后关闭,多次调用Done方法会返回同一个Channel; * Err方法返回当前Context结束的原因,它只会在Done返回的Channel被关闭时才会返回非空的值; * 如果当前Context被取消机会返回Canceled错误; * 如果当前Context超时就会返回DeadlineExceeded错误; * Value方法会从Context中返回键对应的值,多次调用Value并传入相同的Key会返回相同的结果。