首頁 >常見問題 >golang中ctx是什麼

golang中ctx是什麼

尊渡假赌尊渡假赌尊渡假赌
尊渡假赌尊渡假赌尊渡假赌原創
2023-06-09 14:34:082761瀏覽

Golang中ctx是Context的縮寫,是一個標準庫中的類型,用於在「goroutine」之間傳遞請求作用域特定的值、取消訊號和截止時間等元資料。

golang中ctx是什麼

本教學作業系統: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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn