上下文

context 包(在 Go 1.7 中)或 golang.org/x/net/context 包(Pre 1.7)是用於建立上下文的介面,該上下文可用於跨 API 邊界和服務之間傳送請求範圍值和期限,以及所述介面的簡單實現。

除此之外:上下文這個詞被寬泛地用於指代整個樹,或者指樹中的單個葉子,例如。實際的 context.Context 值。

在高層次上,上下文是樹。構造它們時會向樹中新增新葉子(具有父值的 context.Context),並且永遠不會從樹中刪除葉子。任何上下文都可以訪問其上方的所有值(資料訪問僅向上流動),如果取消任何上下文,其子項也將被取消(取消訊號向下傳播)。取消訊號通過一個函式實現,該函式返回一個在取消上下文時將被關閉(可讀)的通道; 這使得上下文成為實現管道和取消併發模式或超時的非常有效的方式。

按照慣例,採用上下文的函式具有第一個引數 ctx context.Context。雖然這只是一個慣例,但應該遵循這個慣例,因為許多靜態分析工具專門尋找這個引數。由於 Context 是一個介面,因此也可以將現有的類上下文資料(在整個請求呼叫鏈中傳遞的值)轉換為普通的 Go 上下文,並通過實現一些方法以向後相容的方式使用它們。此外,上下文對於併發訪問是安全的,因此你可以從許多 goroutine(無論它們是在並行執行緒上執行還是作為併發協同程式)使用它們而不用擔心。

進一步閱讀