一、为什么使用Context
(一)go的扛把子
要论go最津津乐道的功能莫过于go强大而简洁的并发能力。
func main(){
go func(){
fmt.Println("Hello World")
}()
}
通过简单的go func(){},go可以快速生成新的协程并运行。
(二)想象一个没有Context的世界
有并发的地方就有江湖。每个编程语言都有各自的并发编程方式,也有不同的并发控制方法,比如java通过join()来做主子线程同步。
go里面常用于协程间通信和管理的有channel和sync包。比如channel可以通知协程做特定操作(退出,阻塞等),sync可以加锁和同步。
假如我要实现一个可以同时关闭所有协程的程序,可以这样实现。
closed := make(chan struct{})
for i := 0; i < 2; i++ {
// do something
go func(i int) {
select {
case <-closed:
fmt.Printf("%d Closed\n", i)