Go 中的错误处理:标准和惯用方法
Golang 鼓励使用错误变量来指示错误的发生。但是,没有预定义的标准错误变量集。相反,建议开发人员采用惯用的做法来定义和处理错误。
固定错误变量
包定义名称以以下开头的固定错误变量是常见的前缀“错误”。这些变量通常用于表示特定的错误条件,以便轻松检查错误。例如:
var ( ErrSomethingBad = errors.New("some string") ErrKindFoo = errors.New("foo happened") )
错误类型
另一种惯用方法是通过创建实现错误接口的结构来定义自定义错误类型。这些错误类型可以包含与错误相关的附加信息,以便于检查特定类型的错误。
type SomeError struct { 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") }
使用标准错误
Go 提供了在其包中定义的一组有限的标准错误。在实现接口或遵守特定标准时经常会出现这些错误。但是,通常建议为包内更具体的错误条件定义自定义错误。
func SomeFunc() error { return io.EOF }
错误接口
Go 还允许创建错误接口定义常见错误行为。这些接口可以检查特定属性的错误。
type Error interface { error Timeout() bool // Is the error a timeout? Temporary() bool // Is the error temporary? }
Go 1.13 中的错误包装
从 Go 1.13 开始,可以使用上下文包装现有错误或附加信息。这通过向用户提供更多上下文来简化错误处理,而无需大量自定义错误类型。
func SomepackageFunction() error { err := somethingThatCanFail() if err != nil { return fmt.Errorf("some context: %w", err) } }
通过遵循这些惯用实践,开发人员可以有效地处理 Go 代码中的错误,确保清晰且可管理的错误处理机制。
以上是惯用的 Go 实践如何解决错误处理?的详细内容。更多信息请关注PHP中文网其他相关文章!