在 Golang 中,有多种处理错误的惯用方法。
作者经常按照命名约定 Err... 来声明固定错误变量。例如:
var ( ErrSomethingBad = errors.New("some string") ErrKindFoo = errors.New("foo happened") )
使用对调用者有用的特定信息声明错误类型(...Error)是另一种常见做法。
type SomeError struct { // extra information, whatever might be useful to callers // (or for making a nice message in `Error()`) ExtraInfo int } type OtherError string func (e SomeError) Error() string { /* … */ } func (e OtherError) Error() string { return fmt.Sprintf("failure doing something with %q", string(e)) }
临时错误
如果您不希望用户需要测试特定错误,您可以使用Errors.New创建临时错误。
func SomepackageFunction() error { return errors.New("not implemented") }
使用标准包错误
您可以利用标准包(如io.EOF)中定义的错误。但是,通常最好为自己的包创建自定义错误。
func SomeFunc() error { return io.EOF }
错误接口
创建错误接口允许您检查特定的行为或类型。
type Error interface { error Timeout() bool // Is the error a timeout? Temporary() bool // Is the error temporary? }
上下文错误
将此技术与 Go 1.13 或更高版本一起使用,为现有错误提供额外的上下文。
func SomepackageFunction() error { err := somethingThatCanFail() if err != nil { return fmt.Errorf("some context: %w", err) } }
方法的选择取决于您是否预计用户需要测试特定错误以及多个用户实现自己的错误处理的可能性。
以上是如何最好地处理 Go 中的错误?的详细内容。更多信息请关注PHP中文网其他相关文章!