在Go語言中,Context用于在請求范圍內傳遞數據、取消信號和處理請求的截止時間。Context是一個接口類型,定義如下:
type Context interface {
Deadline() (deadline time.Time, ok bool)
Done() <-chan struct{}
Err() error
Value(key interface{}) interface{}
}
使用Context的基本步驟如下:
可以使用context.Background()
函數創建一個空的Context,也可以使用context.WithCancel()
、context.WithDeadline()
或context.WithTimeout()
函數創建帶有取消、截止時間或超時的Context。例如:
ctx, cancel := context.WithCancel(context.Background())
defer cancel()
在函數簽名中將Context作為第一個參數,這樣就可以在函數內部使用該Context了。例如:
func doSomething(ctx context.Context) {
// 使用ctx進行操作
}
可以通過Context的方法來獲取截止時間、取消信號或判斷Context是否已經結束。例如:
deadline, ok := ctx.Deadline()
done := ctx.Done()
err := ctx.Err()
可以使用Context的Value()
方法來在Context中傳遞數據,key必須是可比較的類型,而value可以是任意類型。例如:
key := "key"
value := "value"
ctx := context.WithValue(context.Background(), key, value)
總的來說,使用Context可以幫助我們有效地管理請求的生命周期、控制并發、傳遞數據等。在Go語言的標準庫中,很多包都提供了支持Context的API。