考虑下面的控制器和repo。
var ErrNotFound = errors.New("not found")
type Resource struct {
Name string
}
type repository interface {
CreateResource(ctx context.Context, name string) (*Resource, error)
}
type Controller struct {
Repo repository
}
func (c *Controller) CreateResource(ctx context.Context, name string) (*Resource, error) {
r, err := c.Repo.CreateResource(ctx, name)
// error checking ...
if err != nil {
}
return r, nil
}
字符串
为了保持整洁,控制器还定义了它希望任何repo遵守的协议。同样,任何sentinel错误都应该由控制器定义,而不是由repository定义。我真的找不到任何这样处理错误的例子,这让我怀疑这是否是正确的方法。我的问题是,在不同的应用程序层之间解耦错误消息的惯用方法是什么?
1条答案
按热度按时间gab6jxml1#
你可以在每个级别上定义几个错误,比如仓库可以抛出ErrDB和ErrNotFound,你可以检查实际返回给你的错误,并按照你想要的方式处理它。
字符串