最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(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的評論 (共 條)

分享到微博請遵守國家法律
武乡县| 方山县| 北宁市| 桦川县| 安宁市| 普格县| 正蓝旗| 菏泽市| 弋阳县| 万源市| 武胜县| 大宁县| 竹溪县| 平度市| 乐都县| 涿州市| 万源市| 许昌市| 军事| 宁夏| 兴和县| 罗田县| 建阳市| 贵定县| 通化市| 县级市| 遂宁市| 雷山县| 昌黎县| 海安县| 金塔县| 武平县| 阿合奇县| 郸城县| 南丰县| 隆德县| 嵊州市| 唐河县| 苗栗县| 云霄县| 罗山县|