掃二維碼與項目經(jīng)理溝通
我們在微信上24小時期待你的聲音
解答本文疑問/技術(shù)咨詢/運營咨詢/技術(shù)建議/互聯(lián)網(wǎng)交流
context.Context是Golang標(biāo)準(zhǔn)庫提供的接口(context包對此接口有多種實現(xiàn)),該接口提供了四個抽象法:

成都創(chuàng)新互聯(lián)公司專注網(wǎng)站設(shè)計,以設(shè)計驅(qū)動企業(yè)價值的持續(xù)增長,網(wǎng)站,看似簡單卻每一個企業(yè)都需要——設(shè)計,看似簡潔卻是每一位設(shè)計師的心血 10年來,我們只專注做網(wǎng)站。認(rèn)真對待每一個客戶,我們不用口頭的語言來吹擂我們的優(yōu)秀,超過千家的成功案例見證著我們的成長。
type Context interface {
Deadline() (deadline time.Time, ok bool)
Done() <-chan struct{}
Err() error
Value(key any) any
}
context包提供了兩個方法:
func Background() Context{}
func TODO() Context {}
目前context.Background和context.TODO方法沒有太大差別,返回的都是空Context,只是在使用場景和語義上稍有不同。其他的Context都需要基于構(gòu)造好的Context衍生出來,一個Context可以衍生多個子Context。
context包提供如下四個以With開頭的衍生Context的方法:
func WithCancel(parent Context) (ctx Context, cancel CancelFunc)
func WithDeadline(parent Context, d time.Time) (Context, CancelFunc)
func WithTimeout(parent Context, timeout time.Duration) (Context, CancelFunc)
func WithValue(parent Context, key, val any) Context
前三種方法的相同點都是基于parent Context生成一個新的Context并返回一個CancelFunc方法,CancelFunc調(diào)用后,當(dāng)前Context和基于新Context的子Context都會被取消。不同點在于WithCancel方法返回的CancelFunc需要手動調(diào)用;WithDeadline方法可以設(shè)置一個時間點,到這個時間點后會自動調(diào)用CancelFunc,當(dāng)然也可以手動調(diào)用;WithTimeout方法可以設(shè)置時長,超過指定時長后會自動調(diào)用CancelFunc,當(dāng)然也可以手動調(diào)用。
WithValue方法可以生成一個綁定指定的鍵值對數(shù)據(jù)的Context,可以通過context.Value(Key) 獲取指定key的值。

我們在微信上24小時期待你的聲音
解答本文疑問/技術(shù)咨詢/運營咨詢/技術(shù)建議/互聯(lián)網(wǎng)交流