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

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

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

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刪除
最新教學 更多>
  • 為什麼HTML無法打印頁碼及解決方案
    為什麼HTML無法打印頁碼及解決方案
    無法在html頁面上打印頁碼? @page規則在@Media內部和外部都無濟於事。 HTML:Customization:@page { margin: 10%; @top-center { font-family: sans-serif; font-weight: ...
    程式設計 發佈於2025-04-30
  • HTML格式標籤
    HTML格式標籤
    HTML 格式化元素 **HTML Formatting is a process of formatting text for better look and feel. HTML provides us ability to format text without us...
    程式設計 發佈於2025-04-30
  • 組件驅動CSS框架:開發者的新選擇
    組件驅動CSS框架:開發者的新選擇
    核心要点 Web Components日益流行,对能够处理这种开发类型的CSS框架的需求也日益增长。传统的CSS框架(如Bootstrap或Foundation)由于其广泛的内置样式和代码,可能会限制开发人员使用Web Components。 组件驱动型CSS框架(如Pattern Lab、SUI...
    程式設計 發佈於2025-04-30
  • 如何在Chrome中居中選擇框文本?
    如何在Chrome中居中選擇框文本?
    選擇框的文本對齊:局部chrome-inly-ly-ly-lyly solument 您可能希望將文本中心集中在選擇框中,以獲取優化的原因或提高可訪問性。但是,在CSS中的選擇元素中手動添加一個文本 - 對屬性可能無法正常工作。 初始嘗試 state)</option> < o...
    程式設計 發佈於2025-04-30
  • 在Java中使用for-to-loop和迭代器進行收集遍歷之間是否存在性能差異?
    在Java中使用for-to-loop和迭代器進行收集遍歷之間是否存在性能差異?
    For Each Loop vs. Iterator: Efficiency in Collection TraversalIntroductionWhen traversing a collection in Java, the choice arises between using a for-...
    程式設計 發佈於2025-04-30
  • 如何高效地在一個事務中插入數據到多個MySQL表?
    如何高效地在一個事務中插入數據到多個MySQL表?
    mySQL插入到多個表中,該數據可能會產生意外的結果。雖然似乎有多個查詢可以解決問題,但將從用戶表的自動信息ID與配置文件表的手動用戶ID相關聯提出了挑戰。 使用Transactions和last_insert_id() 插入用戶(用戶名,密碼)值('test','tes...
    程式設計 發佈於2025-04-30
  • `ConfigurationManager.AppSettings.Set`為何不保存App.Config更改?
    `ConfigurationManager.AppSettings.Set`為何不保存App.Config更改?
    app.config值修改quandary 在提供的代碼片段中,嘗試修改app.config文件中的值。但是,這種修改並不像預期的那樣持續。要識別此問題的來源,讓我們深入研究提供的代碼並探索潛在問題。 代碼段: lang =“ Russian”; 私有void main_formclosing(對...
    程式設計 發佈於2025-04-30
  • 如何避免Go語言切片時的內存洩漏?
    如何避免Go語言切片時的內存洩漏?
    ,a [j:] ...雖然通常有效,但如果使用指針,可能會導致內存洩漏。這是因為原始的備份陣列保持完整,這意味著新切片外部指針引用的任何對象仍然可能佔據內存。 copy(a [i:] 對於k,n:= len(a)-j i,len(a); k
    程式設計 發佈於2025-04-30
  • C++20 Consteval函數中模板參數能否依賴於函數參數?
    C++20 Consteval函數中模板參數能否依賴於函數參數?
    [ consteval函數和模板參數依賴於函數參數在C 17中,模板參數不能依賴一個函數參數,因為編譯器仍然需要對非contexexpr futcoriations contim at contexpr function進行評估。 compile time。 C 20引入恆定函數,必須在編譯時進...
    程式設計 發佈於2025-04-30
  • Java開發者如何保護數據庫憑證免受反編譯?
    Java開發者如何保護數據庫憑證免受反編譯?
    在java 在單獨的配置文件保護數據庫憑證的最有效方法中存儲憑據是將它們存儲在單獨的配置文件中。該文件可以在運行時加載,從而使登錄數據從編譯的二進製文件中遠離。 使用prevereness class import java.util.prefs.preferences; 公共類示例{ 首選...
    程式設計 發佈於2025-04-30
  • 如何使用Regex在PHP中有效地提取括號內的文本
    如何使用Regex在PHP中有效地提取括號內的文本
    php:在括號內提取文本在處理括號內的文本時,找到最有效的解決方案是必不可少的。一種方法是利用PHP的字符串操作函數,如下所示: 作為替代 $ text ='忽略除此之外的一切(text)'; preg_match('#((。 &&& [Regex使用模式來搜索特...
    程式設計 發佈於2025-04-30
  • MySQL中如何保持UTF8編碼的表格輸出格式?
    MySQL中如何保持UTF8編碼的表格輸出格式?
    在使用包含非英語字符的MySQL數據庫時,請使用MySQL命令行表達式輸出格式格式化,而在切換到utf8編碼時,表格查詢結果的輸出格式可能會中斷。本文提供了解決此格式問題的綜合指南。 簡短答案 使用-default-character-character-set = utf8選項將mysql cl...
    程式設計 發佈於2025-04-30
  • 如何使用Java.net.urlConnection和Multipart/form-data編碼使用其他參數上傳文件?
    如何使用Java.net.urlConnection和Multipart/form-data編碼使用其他參數上傳文件?
    使用http request 上傳文件上傳到http server,同時也提交其他參數,java.net.net.urlconnection and Multipart/form-data Encoding是普遍的。 Here's a breakdown of the process:Mu...
    程式設計 發佈於2025-04-30
  • FastAPI自定義404頁面創建指南
    FastAPI自定義404頁面創建指南
    response = await call_next(request) if response.status_code == 404: return RedirectResponse("https://fastapi.tiangolo.com") else: ...
    程式設計 發佈於2025-04-30
  • 如何使用Python的請求和假用戶代理繞過網站塊?
    如何使用Python的請求和假用戶代理繞過網站塊?
    如何使用Python的請求模擬瀏覽器行為,以及偽造的用戶代理提供了一個用戶 - 代理標頭一個有效方法是提供有效的用戶式header,以提供有效的用戶 - 設置,該標題可以通過browser和Acterner Systems the equestersystermery和操作系統。通過模仿像Chro...
    程式設計 發佈於2025-04-30

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

Copyright© 2022 湘ICP备2022001581号-3