我是 Golang 的新手,当我学习 golang 的上下文部分时,我WithCancel有些困惑。WithTimeout
显示代码。
package main
import (
"context"
"fmt"
"time"
)
func someHandler() {
//ctx, cancel := context.WithCancel(context.Background())
ctx, cancel := context.WithTimeout(context.Background(), 2*time.Second)
go doSth(ctx)
time.Sleep(3 * time.Second)
cancel()
}
func doSth(ctx context.Context) {
var i = 1
for {
time.Sleep(1 * time.Second)
select {
case <-ctx.Done():
fmt.Println("done")
return
default:
fmt.Printf("work %d seconds: \n", i)
}
i++
}
}
func main() {
fmt.Println("start...")
someHandler()
fmt.Println("end.")
}
Run Code Online (Sandbox Code Playgroud)
结果:
// when use WithCancel
//
start...
work …Run Code Online (Sandbox Code Playgroud) go ×1