1 回答

TA貢獻1830條經(jīng)驗 獲得超3個贊
在不了解您的場景的更多細節(jié)的情況下,我唯一的建議是將 Go 例程錯誤處理分離到另一個包中。
幸運的是,已經(jīng)存在一個可以執(zhí)行相同操作的包,名為errgroup
.?以下是使用該包的原始代碼的實現(xiàn)errgroup
:
package main
import (
? ? "context"
? ? "fmt"
? ? "golang.org/x/sync/errgroup"
)
type User struct {
? ? Name? ? ?string
? ? Age? ? ? int
? ? CanDrive *bool
}
func Name() (string, error) {
? ? return "foobar", nil
}
func Age() (int, error) {
? ? return 25, nil
}
func CanDrive() (bool, error) {
? ? return true, nil
}
func fetchUser(ctx context.Context) (*User, error) {
? ? group, ctx := errgroup.WithContext(ctx)
? ? user := &User{}
? ? group.Go(func() (err error) {
? ? ? ? user.Name, err = Name()
? ? ? ? return
? ? })
? ? group.Go(func() (err error) {
? ? ? ? user.Age, err = Age()
? ? ? ? return
? ? })
? ? group.Go(func() error {
? ? ? ? canDrive, err := CanDrive()
? ? ? ? if err == nil {
? ? ? ? ? ? user.CanDrive = &canDrive
? ? ? ? }
? ? ? ? return err
? ? })
? ? if err := group.Wait(); err != nil {
? ? ? ? return nil, err
? ? }
? ? return user, nil
}
func main() {
? ? user, err := fetchUser(context.Background())
? ? fmt.Println(user, err)
}
- 1 回答
- 0 關(guān)注
- 120 瀏覽
添加回答
舉報