第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

context.TODO() 或 context.Background(),我更喜歡哪一個(gè)?

context.TODO() 或 context.Background(),我更喜歡哪一個(gè)?

Go
HUX布斯 2023-03-07 14:43:16
我目前正在將我們的代碼從全局標(biāo)志包遷移到 mongo-driver,不知道我應(yīng)該在哪里使用context.TODO(),context.Background()這真的很混亂,我知道它返回非零空,所以我應(yīng)該context.Background()在主函數(shù)中使用 &init()功能?context.TODO()并在其他地方使用?有人能幫忙嗎?試圖檢查我應(yīng)該使用哪個(gè)參數(shù)context.TODO()或context.Background().
查看完整描述

2 回答

?
富國滬深

TA貢獻(xiàn)1790條經(jīng)驗(yàn) 獲得超9個(gè)贊

檢查他們的文檔:

context.Background():

func Background() Context

Background 返回一個(gè)非零的空上下文。它永遠(yuǎn)不會(huì)被取消,沒有價(jià)值,也沒有截止日期。它通常由 main 函數(shù)、初始化和測試使用,并作為傳入請(qǐng)求的頂級(jí)上下文。

context.TODO():

func TODO() Context

TODO 返回一個(gè)非零的空上下文。當(dāng)不清楚要使用哪個(gè) Context 或它尚不可用時(shí)(因?yàn)樯形磾U(kuò)展周圍函數(shù)以接受 Context 參數(shù)),代碼應(yīng)使用 context.TODO。

根據(jù)文檔,當(dāng)您需要一個(gè)上下文但您(還)沒有并且不知道該使用什么時(shí),請(qǐng)使用context.TODO(). 這正是你的情況,使用context.TODO()正確的文件記錄。此外,靜態(tài)分析工具和 IDE 可能會(huì)支持發(fā)現(xiàn)這些上下文,并在稍后向您發(fā)出警告以解決該問題。

另請(qǐng)注意,如果在必須使用 mongo 驅(qū)動(dòng)程序時(shí)確實(shí)有上下文,請(qǐng)考慮使用該上下文,或從中派生一個(gè)新上下文。

例如,如果您正在編寫一個(gè)需要查詢某些文檔的 HTTP 處理程序,則 HTTP 請(qǐng)求http.Request已經(jīng)有一個(gè)上下文,您可以使用Request.Context(). 當(dāng)您調(diào)用需要上下文的其他 API 函數(shù)時(shí),這是一個(gè)主要的候選對(duì)象。

為什么,你可能會(huì)問?因?yàn)楫?dāng) HTTP 客戶端放棄/中止請(qǐng)求時(shí)請(qǐng)求的上下文被取消,這意味著無論你做什么,客戶端都不會(huì)收到它,所以例如如果 HTTP 處理程序只是提供信息,你也可以中止生成它,節(jié)省一些資源。因此,如果在您執(zhí)行 MongoDB 查詢時(shí)請(qǐng)求上下文被取消,您也可以取消查詢,因?yàn)槟鸁o論如何都不需要(不會(huì)處理)結(jié)果。取消傳遞給查詢執(zhí)行的上下文(Collection.Find()例如)是告訴 MongoDB 服務(wù)器在可能的情況下取消查詢的方法(因?yàn)槟恍枰Y(jié)果)。

因此,在這種情況下使用請(qǐng)求上下文可以在 HTTP 服務(wù)器和 MongoDB 服務(wù)器上為您節(jié)省一些 CPU 時(shí)間和內(nèi)存。

另一個(gè)例子:假設(shè)您必須在 10 秒內(nèi)生成 HTTP 響應(yīng)(可能是平臺(tái)限制),在此期間您必須執(zhí)行 MongoDB 操作,并且必須對(duì)結(jié)果進(jìn)行后處理,這需要 4 秒。在這種情況下,如果 MongoDB 操作花費(fèi)的時(shí)間超過 6 秒,您將無法完成后處理以適應(yīng) 10 秒的限制。因此,如果 MongoDB 操作沒有在 6 秒內(nèi)完成,您還不如取消它。

解決這個(gè)問題的一個(gè)簡單方法是派生一個(gè)超時(shí)為 6 秒的上下文:


如果查詢?cè)?30 秒內(nèi)完成,一切都很好,您可以使用結(jié)果。如果不是,上下文將在 30 秒后被取消,因此c.Find()也(可能)返回錯(cuò)誤。


查看完整回答
反對(duì) 回復(fù) 2023-03-07
?
拉丁的傳說

TA貢獻(xiàn)1789條經(jīng)驗(yàn) 獲得超8個(gè)贊

context.TODO:

當(dāng)不清楚要使用哪個(gè) Context 或它尚不可用時(shí)(因?yàn)樯形磾U(kuò)展周圍函數(shù)以接受 Context 參數(shù)),代碼應(yīng)使用 context.TODO。

context.Background:

Background 返回一個(gè)非零的空上下文。它永遠(yuǎn)不會(huì)被取消,沒有價(jià)值,也沒有截止日期。它通常由 main 函數(shù)、初始化和測試使用,并作為傳入請(qǐng)求的頂級(jí)上下文。

TODO是一個(gè)占位符,用于明確表示將來應(yīng)使用更合適的上下文更新代碼,但目前還沒有。Background當(dāng)不需要這樣的指示并且您只需要一個(gè)沒有值或取消的空根上下文時(shí)使用。它們返回的值是相同的;唯一的區(qū)別是語義,因?yàn)槿藗兛赡軙?huì)掃描代碼以TODO查找上下文(或使用 linter 來這樣做)作為需要更新/尋址的地方。


查看完整回答
反對(duì) 回復(fù) 2023-03-07
  • 2 回答
  • 0 關(guān)注
  • 415 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)