Golang中ctx是Context的縮寫,是一個標準庫中的類型,用於在「goroutine」之間傳遞請求作用域特定的值、取消訊號和截止時間等元資料。
本教學作業系統:Windows10系統、Go1.20.1版本、Dell G3電腦。
在 Golang 中,ctx 是 Context 的縮寫,是一個標準函式庫中的型別。
Context 類型用於在 goroutine 之間傳遞請求作用域特定的值、取消訊號和截止時間等元資料。當建立一個請求時,可以建立一個根 Context,並將其傳入整個應用程式的呼叫鏈中。隨著請求的傳播,這個 Context 可以被其他 goroutine 拷貝並在底層通訊使用。
ctx 主要的功能有:
傳遞元資料:在HTTP請求網路呼叫鏈中一些元資料資訊(如使用者授權Token)需要沿途傳遞和使用,ctx 是實現這種場景的首選方法。
控制流逾時與取消: 在多層函數巢狀呼叫鏈中,錯誤往往需要打穿各級呼叫鏈,在某些情況下甚至需要同時取消Goroutine,ctx就是解決這類問題的本質方法。
以下是一個簡單的範例程式碼,說明如何使用 ctx 控制 goroutine 的取消和逾時。
func main() { ctx, cancel := context.WithCancel(context.Background()) defer cancel() // 常用结合 defer 安排执行 go doSomething(ctx) time.Sleep(10 * time.Second) } func doSomething(ctx context.Context) { select { case <-time.After(time.Hour): fmt.Println("do something") case <-ctx.Done(): fmt.Println("canceled by user:", ctx.Err()) } }
在範例程式碼中,使用 `context.WithCancel` 建立了一個 Context,並攜帶著取消函數(`cancel()`)後傳遞給 `doSomething` 函數。在`doSomething` 中,透過`select` 來監聽其中的2 個channel,當10 秒過去後,主goroutine 執行了`cancel` 函數,從而向`ctx` 發送一個Done 訊號,這導致`doSomething` 的goroutine收到該信號並
以上是golang中ctx是什麼的詳細內容。更多資訊請關注PHP中文網其他相關文章!