context包探究
最近做專案的時候用到攜程同步,我想到的是sync包,具體做法如下
被別人安利說context包做協程之間同步是不錯的選擇,於是初步嘗試了一下
package TestProject
import (
"context"
"fmt"
"time"
"testing"
)
/*
在這裡我認為context.WithCancel返回的上下文物件、cancel函式
使用場景ABC……
統一對ABC停止- -!我只能想到這些
*/
func Test_ContextWithCancel(t *testing.T) {
ctx,cancel:=context.WithCancel(context.Background())
go printx(ctx)
time.Sleep(5*time.Second)
cancel()
time.Sleep(1*time.Second)
}
/*
ABC……超時停止- -!
*/
func Test_ContextWithTimeout(t *testing.T) {
ctx,cancel:=context.WithTimeout(context.Background(),4*time.Second)
go printx(ctx)
time.Sleep(5*time.Second)
cancel()
time.Sleep(time.Second)
}
/*
ABC……直到某個時刻去停止
*/
func Test_ContextWithDeadLine(t *testing.T) {
ctx,cancel:=context.WithDeadline(context.Background(),time.Now().Add(4*time.Second))
go printx(ctx)
time.Sleep(5*time.Second)
cancel()
time.Sleep(time.Second)
}
/*
ABC……同時引用上下文中的值?下面是一處使用場景
// NewContext returns a new Context carrying userIP.
func NewContext(ctx context.Context, userIP net.IP) context.Context {
return context.WithValue(ctx, userIPKey, userIP)
}
// FromContext extracts the user IP address from ctx, if present.
func FromContext(ctx context.Context) (net.IP, bool) {
// ctx.Value returns nil if ctx has no value for the key;
// the net.IP type assertion returns ok=false for nil.
userIP, ok := ctx.Value(userIPKey).(net.IP)
return userIP, ok
}
*/
func Test_ContextWithValue(t *testing.T) {
ctx:=context.WithValue(context.Background(),"key","value")
go printx(ctx)
time.Sleep(5*time.Second)
}
func printx(ctx context.Context) {
for {
select {
case <-ctx.Done():
fmt.Println("over")
return
default:
fmt.Println("xxx\n")
if ctx.Value("key")!=nil{
fmt.Println(ctx.Value("key").(string)+"\n")
}
time.Sleep(time.Second)
}
}
}
但是不理解具體應用場景,有
大佬 --help
一下嗎?
相關文章
- context包Context
- Go:context包GoContext
- golang中的context包GolangContext
- Golang Context 包詳解GolangContext
- Go 語言 context 包實踐GoContext
- 測試 iris 時自定義 context 包Context
- Go語言Context包原始碼學習GoContext原始碼
- Go:context.ContextGoContext
- Go語言的context包從放棄到入門GoContext
- ContextContext
- go 上下文:context.ContextGoContext
- Java併發包中執行緒池ThreadPoolExecutor原理探究Java執行緒thread
- 《Lua-in-ConTeXt》02:ConTeXt 計算機Context計算機
- 聊聊ContextContext
- 理解ContextContext
- Go ContextGoContext
- 【Spring】重構--手寫Spring核心邏輯(三)實現IOC/DI(context包)SpringContext
- Context真正的實現與Context設計模式Context設計模式
- 九. Go併發程式設計--context.ContextGo程式設計Context
- require.contextUIContext
- ConTeXt 蹊徑Context
- 【Go語言】小白也能看懂的context包詳解:從入門到精通GoContext
- 重拾React: ContextReactContext
- props-type contextContext
- Android - 認識ContextAndroidContext
- React context基本用法ReactContext
- Go context 介紹GoContext
- React Context那些事ReactContext
- Golang中context使用GolangContext
- Go語言之ContextGoContext
- 如何建立stacking context?Context
- webAR 探究Web
- synchronized探究synchronized
- 理解 Context.getSystemService 原理Context
- pythonic context manager知多少PythonContext
- 深入理解golang:ContextGolangContext
- Go標準庫ContextGoContext
- ‘error: ‘‘this‘‘ cannot be implicitly captured in this context‘ErrorAPTContext