国产亚洲精品福利在线无卡一,国产精久久一区二区三区,亚洲精品无码国模,精品久久久久久无码专区不卡

當(dāng)前位置: 首頁(yè) > news >正文

怎么建設(shè)網(wǎng)站模板上傳站長(zhǎng)交流平臺(tái)

怎么建設(shè)網(wǎng)站模板上傳,站長(zhǎng)交流平臺(tái),wordpress教程 pdf下載地址,做營(yíng)銷網(wǎng)站公司文章目錄背景簡(jiǎn)介主要方法獲得頂級(jí)上下文當(dāng)前協(xié)程上下文的操作創(chuàng)建下級(jí)協(xié)程的Context場(chǎng)景示例背景 在父子協(xié)程協(xié)作過(guò)程中, 父協(xié)程需要給子協(xié)程傳遞信息, 子協(xié)程依據(jù)父協(xié)程傳遞的信息來(lái)決定自己的操作. 這種需求下可以使用 context 包 簡(jiǎn)介 Context通常被稱為上下文&#xff…

文章目錄

    • 背景
    • 簡(jiǎn)介
    • 主要方法
      • 獲得頂級(jí)上下文
      • 當(dāng)前協(xié)程上下文的操作
      • 創(chuàng)建下級(jí)協(xié)程的Context
    • 場(chǎng)景示例

背景

在父子協(xié)程協(xié)作過(guò)程中, 父協(xié)程需要給子協(xié)程傳遞信息, 子協(xié)程依據(jù)父協(xié)程傳遞的信息來(lái)決定自己的操作.
這種需求下可以使用 context 包

簡(jiǎn)介

Context通常被稱為上下文,在go中,上層的協(xié)程可以將context 傳給下層的協(xié)程, 來(lái)實(shí)現(xiàn)協(xié)程之間的信息傳遞, 同時(shí)下層協(xié)程也可以將context 傳給更下層的協(xié)程, 來(lái)形成一張樹(shù)狀圖.

主要方法

獲得頂級(jí)上下文

首先要獲得最頂級(jí)協(xié)程使用的Context

func Background() Context

Background 方法一般創(chuàng)建根 Context 的時(shí)候。

func TODO() Context

TODO 方法,當(dāng)不清楚使用哪個(gè)上下文時(shí),可以使用 TODO 方法。

當(dāng)前協(xié)程上下文的操作

針對(duì) Context 可以執(zhí)行如下操作.

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

Deadline 方法返回結(jié)果有兩個(gè),第一個(gè)是截止時(shí)間,到了這個(gè)截止時(shí)間,Context 會(huì)自動(dòng)取消;第二個(gè)是一個(gè) bool 類型的值,如果 Context 沒(méi)有設(shè)置截止時(shí)間,第二個(gè)返回結(jié)果是 false,如果需要取消這個(gè) Context,就需要調(diào)用取消函數(shù)。

Done() <-chan struct{}

Done 方法返回一個(gè)只讀的 channel 對(duì)象,類型是 struct{},在 goroutine 中,如果 Done 方法返回的結(jié)果可以被讀取,代表父 Context 調(diào)用了取消函數(shù)。

Err() error

Err 方法返回 Context 被取消的原因。

Value(key interface{}) interface{}

Value 方法返回此 Context 綁定的值。它是一個(gè) kv 鍵值對(duì),通過(guò) key 獲取對(duì)應(yīng) value 的值

創(chuàng)建下級(jí)協(xié)程的Context

我們要依據(jù)父級(jí)的協(xié)程的Context創(chuàng)建子級(jí)協(xié)程的Context

WithCancel(parent Context) (ctx Context, cancel CancelFunc)
WithCancel 方法,基于父 Context,接收一個(gè)父 Context 參數(shù),生成一個(gè)新的子 Context,和一個(gè) cancel 函數(shù),用于取消 Context。

WithDeadline(parent Context, d time.Time) (Context, CancelFunc)
WithDeadline 方法,基于父 Context,接收一個(gè)父 Context 參數(shù),和一個(gè)截止時(shí)間的參數(shù),生成一個(gè)新的子 Context,和一個(gè) cancel 函數(shù),可以使用 cancel 函數(shù)取消 Context,也可以等到截止時(shí)間,自動(dòng)取消 Context。

WithTimeout(parent Context, timeout time.Duration) (Context, CancelFunc)
WithTimeout 方法,基于父 Context,接收一個(gè)父 Context 參數(shù),和一個(gè)超時(shí)時(shí)間的參數(shù),生成一個(gè)新的子 Context,和一個(gè) cancel 函數(shù),可以使用 cancel 函數(shù)取消 Context,也可以等到超時(shí)時(shí)間,自動(dòng)取消 Context。

WithValue(parent Context, key, val interface{}) Context
WithValue 方法,基于父 Context,生成一個(gè)新的子 Context,攜帶了一個(gè) kv 鍵值對(duì),一般用于傳遞上下文信息。

場(chǎng)景示例

公司下班, 要領(lǐng)導(dǎo)下班后, 員工才下班, 但是員工忍耐也是有限度的, 領(lǐng)導(dǎo)老是不下班, 員工就自己走了.

package mainimport ("context""fmt""time"
)var name stringfunc main() {// 頂級(jí)Conxt, 領(lǐng)導(dǎo)up_context := context.Background()// 創(chuàng)建領(lǐng)導(dǎo)的下級(jí) 員工的的Context, 員工就最多加班5秒, 超過(guò)5秒領(lǐng)導(dǎo)不下班. 員工就下班了ctx, cancle := context.WithTimeout(up_context, time.Second*5)go work(ctx, "小卡拉")// 父線程等待3秒, 領(lǐng)導(dǎo)加班3秒time.Sleep(time.Second * 3)fmt.Println(time.Now().Format("2006-01-02 15:04:05"), "領(lǐng)導(dǎo)下班了!")// 領(lǐng)導(dǎo)下班調(diào)用cancle(), 取消員工的 Contextcancle()time.Sleep(time.Second * 5)
}func work(ctx context.Context, name string) {for {select {// 看看員工的 Context 還在不在case <-ctx.Done():fmt.Println(time.Now().Format("2006-01-02 15:04:05"), name, "下班!")returndefault:fmt.Println(time.Now().Format("2006-01-02 15:04:05"), name, "加班!。")time.Sleep(time.Second * 1)}}
}

上面的代碼中up_context 是最頂級(jí)的 Context 是使用context.Background()創(chuàng)建出來(lái)的, 員工的 Context對(duì)象 ctx 則是使用最頂級(jí)的up_context 并且使用WithTimeout方法創(chuàng)建出來(lái)的, 表示如果5秒內(nèi)不調(diào)用返回的 cancel 方法, 就會(huì)自動(dòng)取消, 對(duì)應(yīng)員工最多等待領(lǐng)導(dǎo)五秒. 上面的執(zhí)行結(jié)果是:
在這里插入圖片描述
可以看到, 領(lǐng)導(dǎo)就加班了3秒, 領(lǐng)導(dǎo)一下班, 員工就下班了.

如果領(lǐng)導(dǎo)加班7秒呢, 代碼改成如下

package mainimport ("context""fmt""time"
)var name stringfunc main() {// 頂級(jí)Conxt, 領(lǐng)導(dǎo)up_context := context.Background()// 創(chuàng)建領(lǐng)導(dǎo)的下級(jí) 員工的的Context, 員工就最多加班5秒, 超過(guò)5秒領(lǐng)導(dǎo)不下班. 員工就下班了ctx, cancle := context.WithTimeout(up_context, time.Second*5)go work(ctx, "小卡拉")// 父線程等待7秒, 領(lǐng)導(dǎo)加班7秒time.Sleep(time.Second * 7)fmt.Println(time.Now().Format("2006-01-02 15:04:05"), "領(lǐng)導(dǎo)下班了!")// 領(lǐng)導(dǎo)下班調(diào)用cancle(), 取消員工的 Contextcancle()time.Sleep(time.Second * 5)
}func work(ctx context.Context, name string) {for {select {// 看看員工的 Context 還在不在case <-ctx.Done():fmt.Println(time.Now().Format("2006-01-02 15:04:05"), name, "下班!")returndefault:fmt.Println(time.Now().Format("2006-01-02 15:04:05"), name, "加班!。")time.Sleep(time.Second * 1)}}
}

執(zhí)行結(jié)果如下
在這里插入圖片描述
可以看到, 領(lǐng)導(dǎo)加班7秒, 員工并沒(méi)有等著領(lǐng)導(dǎo)下班, 在第五秒的時(shí)候自己下班了.

http://m.aloenet.com.cn/news/1382.html

相關(guān)文章:

  • 軟件推廣網(wǎng)站周口seo
  • 新建的wordpress沒(méi)有注冊(cè)站外seo是什么
  • wordpress產(chǎn)品傭金杭州百度整站優(yōu)化服務(wù)
  • h5 做的網(wǎng)站 價(jià)格怎么樣在百度上免費(fèi)推廣
  • 北京網(wǎng)站制作官網(wǎng)分銷渠道
  • 網(wǎng)站怎么做移動(dòng)端適配今天最新消息
  • tv做后綴的動(dòng)漫網(wǎng)站百度廣告點(diǎn)擊軟件
  • 河南省住房和城鄉(xiāng)建設(shè)廳網(wǎng)站主頁(yè)鄭州最好的建站公司
  • 宣城市政建設(shè)集團(tuán)有限公司網(wǎng)站鄭州seo外包平臺(tái)
  • 銷售網(wǎng)站建設(shè)公司網(wǎng)絡(luò)營(yíng)銷是以什么為基礎(chǔ)
  • 做的最成功的網(wǎng)站百度知道官網(wǎng)登錄入口
  • 網(wǎng)站宣傳方法有哪些營(yíng)銷方法有哪些方式
  • 北京html5網(wǎng)站建設(shè)百度在線問(wèn)答
  • 內(nèi)江住房和城鄉(xiāng)建設(shè)廳網(wǎng)站廣告軟文200字
  • 北京海淀區(qū)網(wǎng)站建設(shè)全網(wǎng)營(yíng)銷整合營(yíng)銷
  • 阿里云 建設(shè)網(wǎng)站佛山網(wǎng)站建設(shè)排名
  • 漂亮大氣的裝潢室內(nèi)設(shè)計(jì)網(wǎng)站模板 單頁(yè)式html5網(wǎng)頁(yè)模板包國(guó)內(nèi)搜索引擎排行榜
  • 方圓網(wǎng)站建設(shè)國(guó)內(nèi)seo公司排名
  • 百度自助網(wǎng)站建設(shè)南寧網(wǎng)站快速排名提升
  • 上海設(shè)計(jì)網(wǎng)站baidu百度
  • 梅林網(wǎng)站建設(shè)網(wǎng)站診斷工具
  • 做兼職的網(wǎng)站是不是真的嗎重慶整站seo
  • 西安做網(wǎng)站比較好的公司臺(tái)州seo排名外包
  • 怎樣做單頁(yè)銷售網(wǎng)站軟文范例大全100字
  • 站酷網(wǎng)站源碼永久免費(fèi)域名注冊(cè)
  • 哪個(gè)網(wǎng)站可以做試卷上海牛巨微seo關(guān)鍵詞優(yōu)化
  • 番禺做網(wǎng)站哪家強(qiáng)北京seo公司網(wǎng)站
  • 新聞網(wǎng)站建設(shè)合同谷歌優(yōu)化師
  • 最新獲取網(wǎng)站訪客qq接口成人職業(yè)技術(shù)培訓(xùn)學(xué)校
  • 萊蕪網(wǎng)站優(yōu)化招聘網(wǎng)sem是什么的英文縮寫(xiě)