golang context的概念和使用方法
什么是context?
請求Go服務(wù)器的各request通過不同的goroutine來處理
request的handle可以訪問DB或者RPC等
保存請求過程中的token,request期限等
request超時的時候,釋放資源
可以把request作用域的值全部傳給goroutine的context包
使用方法
主要的使用場景有兩種:
傳遞request作用域的值
cancel取消
context.Context interface
goblog說明概要:
content取消,超時的時候返回關(guān)閉的通道的Done()
通過Err()?error結(jié)構(gòu)體返回,為什么Done通道關(guān)閉了
Deadline設(shè)定了的場合,返回Deadline的Deadline()
返回通過key保管的值
生成
通過下面兩種發(fā)發(fā)可以生成
通過http.Request.Context()也可以獲得
Background()
? ? ? 基本上都通過這種獲取
TODO()
不知道是否要使用但是不想傳nil,那么就用這個方法。
行為上和Background一樣,返回一個空的context
request作用域的值的傳播
不要把什么信息都放到里面,按照最小需求把認(rèn)證和Deadlin的信息放進去即可。
Set值 WithValue()
Get值 Value()
取消處理
WithCancel(parent Context) (ctx Context,cancel CancelFunc)
父context傳遞給子context的話,子的context和cancel方法
第二個返回值CancelFunc可以取消子的context
WithTimeout
第二個參數(shù)如果指定的話,經(jīng)過了這些時間就會執(zhí)行取消處理
WithDeadline
和WithTimeout基本相同,不是經(jīng)過多久,而是截止到什么時候取消。
例子
執(zhí)行結(jié)果:
寫這個文章是參照了下面這個頁面:
https://qiita.com/marnie_ms4/items/985d67c4c1b29e11fffc