是否存在用于将自定义错误类型分组在一起的可接受模式,以便我可以根据它们的组以不同方式处理它们?
例如,以下是我在 C# 中的例外情况:
abstract class FriendlyException : ApplicationException {
protected FriendlyException(string message) : base(message) { }
}
class MyNiceException : FriendlyException {
public MyNiceException(string message) : base(message) { }
}
catch然后我可以根据它是否属于该类别来做一些不同的事情:
try { DoSomething(); }
catch (FriendlyException ex) { Console.WriteLine(ex.Message); }
catch { Console.WriteLine("Unhandled error"); }
在 Go 中,我看到我可以As直接在类型上使用或切换,但由于存在隐式接口,我看不出这可以在没有浪费接口成员的情况下完成,如下所示:
type FriendlyError interface { SomeWastedMethod() }
type MyFriendlyError struct {}
func (fe MyFriendlyError) SomeWastedMethod() {}
func (fe MyFriendlyError) Error() string { return "implementing error interface" }
然后我可以检查该组是否有错误,如下所示:
var fe FriendlyError
err := DoSomething()
if err != nil {
if errors.As(err, &fe) {
fmt.Println(err.Error())
} else {
fmt.Println("Unhandled error")
}
}
结构中浪费的方法MyFriendlyError让我很困扰。这是完成此任务的唯一方法,还是有其他一些标准模式?
在我的示例中,我想要多种不同的错误类型,其中一些可以安全地将消息返回给调用者,而其中一些我只想给调用者一个通用消息,同时仍保留内部日志记录的详细信息。
慕田峪9158850
相关分类