Context 包是 Go 語言中用來傳遞請求范圍變量、取消信號以及超時時間的包。它主要用于在 Goroutine 之間傳遞請求作用域的信息,比如傳遞請求的上下文、超時、取消信號等。通過 Context 包,可以有效控制 Goroutine 的行為,避免資源泄漏和無限制地等待。
Context 包提供的主要功能包括:
- 傳遞請求的上下文信息:通過 WithValue 方法,可以在 Context 中存儲鍵值對,用來傳遞請求的上下文信息,比如傳遞用戶認證信息、請求 ID 等。
- 控制 Goroutine 的取消信號:通過 WithCancel 方法可以創建一個可以取消的 Context,并在需要取消 Goroutine 時調用該 Context 的 cancel 方法。
- 控制 Goroutine 的超時時間:通過 WithTimeout 或 WithDeadline 方法可以創建一個帶有超時時間或截止時間的 Context,在超時或者到達截止時間時,Context 會自動取消 Goroutine。
- 鏈式調用:Context 可以形成一個由父 Context 衍生出來的 Context 樹,可以通過 WithValue 方法傳遞子 Context 信息,保持請求的上下文一致性。
總的來說,Context 包提供了統一的機制來管理 Goroutine 之間的請求作用域信息,有效地控制 Goroutine 的行為,提高代碼的可維護性和可靠性。