gopackage.md

概述

存放 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)
}
}

//Start executing task1
//Start executing task2
//Start executing task3
//task3 canceled
//Error happened: error happened in task2

网络

存储

计算


gopackage.md
https://abrance.github.io/2024/04/29/mdstorage/domain/golang/gopackage/
Author
xiaoy
Posted on
April 29, 2024
Licensed under