」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > Go Context — TODO() 與 Background() 不再令人困惑!

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

發佈於2024-11-06
瀏覽:471

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():

  • 重構時,你還沒有決定上下文。
  • 當實現需要未來改進的早期程式碼。
版本聲明 本文轉載於:https://dev.to/zakariachahboun/are-you-confused-about-contexttodo-vs-contextbackground-heres-what-you-need-to-know-2h46?1如有侵犯,請聯絡study_golang @163.com刪除
最新教學 更多>

免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。

Copyright© 2022 湘ICP备2022001581号-3