1 回答
TA贡献1830条经验 获得超3个赞
在不了解您的场景的更多细节的情况下,我唯一的建议是将 Go 例程错误处理分离到另一个包中。
幸运的是,已经存在一个可以执行相同操作的包,名为errgroup
. 以下是使用该包的原始代码的实现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 关注
- 84 浏览
添加回答
举报