国产精品天干天干,亚洲毛片在线,日韩gay小鲜肉啪啪18禁,女同Gay自慰喷水

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

Go的context

2023-04-04 14:36 作者:V-i-c  | 我要投稿

context.Context

context.Context一般用于并發(fā)控制。context是一個接口包含四個方法。

type context interface { ? ?

????Deadline() (deadline time.time, ok bool) ? ?

????Done() <- struct{} ? ?

????Err() error ? ?

????Value(key any) any?

}

  • Deadline的第一個返回值表示還有多久就到期,第二個返回值表示是否到期。

  • Done方法是使用的最頻繁的一個方法,它返回一個chan。通常的做法是監(jiān)聽這個chan,如果收到信號則表示chan已經(jīng)關閉,需要執(zhí)行退出,如果chan已經(jīng)關閉,則Err()返回退出的原因。

  • Value()方法返回指定的key對應的value,這是通過context攜帶的值,一般用在跨程序的API中,值的作用域在結(jié)束時停止。key必須是訪問安全的,因為可能涉及到多個goroutine同時訪問。一般常見的策略是在context中存儲授權相關的值。主要用于安全憑證,分布式ID追蹤,操作優(yōu)先級,退出信息號以及到期時間等場景。

context常見的具體實現(xiàn)

context是一個接口,這就需要具體的實現(xiàn)。
context.Background函數(shù)一般用作于根對象的存在,不可以退出,不可以攜帶值。
需要具體的使用context的功能,就需要派生出新的context。
用于退出的函數(shù):

func WithCancel(parent Context) (ctx Context, cancel CancelFunc)

func WithTimeOut(parent Context, timeout time.Duration) (Context, CancelFunc)

func WithDeadline(parent Context, d time.Time) (Context, CancelFunc)

func WithValue(parent Context, key, val any) Context

  • WithCancel函數(shù)返回一個子context并且包含cancel退出方法。子context在兩種情況下會退出:

    1. 一種是調(diào)用cancel;

    2. 另一種是當參數(shù)中父context退出時,該context及其衍生的子context都會全部退出。

  • WithTimeout函數(shù)指定一個超時時間,當超時發(fā)生時,子context將會退出。因此子context退出有三種情況:

    1. context退出

    2. 超時退出

    3. 主動調(diào)用cancel函數(shù)退出

  • WithDeadline函數(shù)與WithTimeOut類似,前者指定的截止日期,后者指定的時間段。

  • WithValue函數(shù)返回帶key-value的子context

Context的原理

context在很大程度上利用了chan在close時會通知所有監(jiān)聽的它的goroutine這個特性實現(xiàn)的。


Go的context的評論 (共 條)

分享到微博請遵守國家法律
利川市| 报价| 商洛市| 南康市| 辉南县| 黄石市| 凯里市| 海丰县| 松潘县| 盐源县| 昭通市| 吴忠市| 双城市| 右玉县| 保德县| 锡林浩特市| 吉水县| 永泰县| 昆山市| 汾西县| 苗栗县| 巫溪县| 岳阳市| 肃南| 苍溪县| 五莲县| 农安县| 崇文区| 旬邑县| 建始县| 伊宁县| 崇仁县| 大庆市| 临夏县| 郓城县| 朝阳区| 铁力市| 紫阳县| 海盐县| 师宗县| 化德县|