概述
存放 golang 的 package 使用技巧
并发
errgroup
提供多个协程间同步机制,一个协程出错,其他协程可以被同步到这个错误
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43
| package main
import ( "context" "errors" "fmt" "golang.org/x/sync/errgroup" )
func main() { g, ctx := errgroup.WithContext(context.Background())
g.Go(func() error { fmt.Println("Start executing task1") return nil })
g.Go(func() error { fmt.Println("Start executing task2") return errors.New("error happened in task2") })
g.Go(func() error { select { case <-ctx.Done(): fmt.Println("task3 canceled") return ctx.Err() default: fmt.Println("Start executing task3") return nil } })
if err := g.Wait(); err != nil { fmt.Println("Error happened: ", err) } }
|
网络
存储
计算