我正在实现一个使用 TCP 的服务器。读取函数具有以下签名
func ReadNext() (Message, error)
该功能可能因两个原因而失败:
连接丢失
解析错误
我的第一反应是用fmt.Errorf(). 但是,我想为该包的使用者提供根据失败原因进行检查和调度的能力,因此据我所知,使用内置包装不提供该选项。
我阅读了不要只是检查错误,优雅地处理它们,发现基本上他提倡使用自定义错误类型进行包装,并在自定义接口上使用类型断言。我发现这很冗长,需要大量额外的代码。另外,我看不到与我的错误类型相关的行为会使它更清晰:
type ParseError interface {
IsParseError() bool
}
type NetworkError interface {
IsNetworkError() bool
}
我基本上看到三个选项:
不要包装并返回哨兵错误
用自定义错误类型包装并进行类型比较
Dave Cheney 风格:使用自定义错误类型进行包装,并对描述行为的接口进行断言。
我发现没有特别好的或优雅的解决方案。有什么建议吗?
烙印99
largeQ
阿波罗的战车
相关分类