context在Golang函數並發程式設計中的作用
Apr 17, 2024 pm 02:27 PM
golang
並發程式設計
context
鍵值對
context套件在Golang函數並發程式設計中用於管理協程執行,它提供了以下作用:傳播取消訊號,允許協程在任務完成前中斷其他協程。設定截止時間,如果協程在截止時間內未完成則自動取消。傳遞附加訊息,允許協程之間傳遞鍵值對。
context在Golang函數並發程式設計中的作用
context
套件是Golang中用於管理函數並發執行的關鍵工具。它提供了在協程之間傳遞請求取消訊號、截止時間和其他相關資訊的能力。
作用
-
取消訊號傳播:
context
允許協程傳遞取消訊號,從而允許發起者協程在任務完成之前中斷正在執行的協程。 -
截止時間設定:
context
可以指定截止時間,如果協程在截止時間之前未完成,則自動取消。 -
值傳遞:
context
可以攜帶任何類型的鍵值對,允許協程之間傳遞附加資訊。
使用
要建立context
對象,可以使用context.Background()
或 context.WithCancel()
。
// 创建一个新context,取消信号为默认 ctx := context.Background() // 创建一个带有取消信号的新context ctx, cancel := context.WithCancel()
登入後複製
取消協程
要取消協程,只需呼叫cancel()
函數。這將發送取消訊號到所有監聽該context
的協程。
// 取消协程 cancel()
登入後複製
監聽取消訊號
協程可以使用context.Done()
通道監聽取消訊號。當通道關閉時,表示context
已取消。
// 监听取消信号 select { case <-ctx.Done(): // 处理取消 }
登入後複製
實戰案例
#考慮以下對HTTP
請求進行逾時的協程:
func MakeRequest(ctx context.Context, url string) (*http.Response, error) { // 创建一个带有截止时间的context ctx, cancel := context.WithTimeout(ctx, 10*time.Second) defer cancel() // 发起HTTP请求 req, err := http.NewRequest(http.MethodGet, url, nil) if err != nil { return nil, err } req = req.WithContext(ctx) resp, err := http.DefaultClient.Do(req) if err != nil { return nil, err } return resp, nil }
登入後複製
在此範例中:
- 使用
context.WithTimeout()
建立帶有10秒截止時間的context
。 - 請求被設定為此
context
,允許底層網路呼叫逾時並取消請求。 -
defer cancel()
確保在函數退出時取消context
,防止任何其他協程被阻塞。
透過使用context
,我們可以控制協程的執行,避免資源洩漏和不必要的等待。
以上是context在Golang函數並發程式設計中的作用的詳細內容。更多資訊請關注PHP中文網其他相關文章!
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱門文章
擊敗分裂小說需要多長時間?
3 週前
By DDD
倉庫:如何復興隊友
3 週前
By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒險:如何獲得巨型種子
3 週前
By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
1 週前
By 尊渡假赌尊渡假赌尊渡假赌
公眾號網頁更新緩存難題:如何避免版本更新後舊緩存影響用戶體驗?
3 週前
By 王林

熱門文章
擊敗分裂小說需要多長時間?
3 週前
By DDD
倉庫:如何復興隊友
3 週前
By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒險:如何獲得巨型種子
3 週前
By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
1 週前
By 尊渡假赌尊渡假赌尊渡假赌
公眾號網頁更新緩存難題:如何避免版本更新後舊緩存影響用戶體驗?
3 週前
By 王林

熱門文章標籤

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)