首頁 >後端開發 >Golang >Go Context — TODO() 與 Background() 不再令人困惑!

Go Context — TODO() 與 Background() 不再令人困惑!

PHPz
PHPz原創
2024-09-10 06:33:32855瀏覽

Go Context — TODO() vs Background() No more confusing!

在 Go 中,上下文包有助於管理請求範圍的值、取消訊號和截止日期。
啟動上下文的兩種常見方法是 context.TODO() 和 context.Background()。
儘管它們的行為相似,但它們的目的不同。

上下文.背景()

當您不需要任何特殊處理(例如取消或截止日期)時,context.Background() 是預設值。
它通常用在 main、init 或初始化不需要更具體上下文的操作時。

例子:

 func main() {
     ctx := context.Background()
     server := http.Server{Addr: ":8080", BaseContext: func(net.Listener) context.Context {
         return ctx
     }}
     log.Fatal(server.ListenAndServe())
 }

在此範例中,context.Background() 用於為 HTTP 伺服器建立基礎上下文。

上下文.TODO()

context.TODO() 是一個佔位符上下文。當您不確定要提供什麼上下文或計劃稍後重構時,請使用它。

例子:

 func processOrder() {
     ctx := context.TODO() // Placeholder, decision on context pending
     err := db.SaveOrder(ctx, orderData)
     if err != nil {
         log.Println("Failed to save order:", err)
     }
 }

這裡,context.TODO() 暫時用於資料庫操作,直到定義更具體的上下文。

主要差異

兩個函數都會傳回空上下文,但它們表達不同的意圖:

  • context.Background():當您確信不需要特殊的上下文功能時使用。
  • context.TODO():暫時佔位符上下文,表示未來的變更。

結論

何時使用 context.Background():

  • 初始化 HTTP 伺服器或資料庫連線等核心服務時。
  • 當不需要取消、截止日期或價值時。

何時使用 context.TODO():

  • 重構時,你還沒有決定上下文。
  • 當實作需要未來改進的早期程式碼。

以上是Go Context — TODO() 與 Background() 不再令人困惑!的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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