Error Handling in Go: Standard and Idiomatic Approaches
Golang encourages the use of error variables to indicate the occurrence of errors. However, there is no predefined set of standard error variables. Instead, developers are advised to adopt idiomatic practices for defining and handling errors.
Fixed Error Variables
It is common for packages to define fixed error variables with names starting with the prefix "Err". These variables are typically used to represent specific error conditions, allowing for easy error checking. For instance:
var ( ErrSomethingBad = errors.New("some string") ErrKindFoo = errors.New("foo happened") )
Error Types
Another idiomatic approach is to define custom error types by creating structs that implement the error interface. These error types can contain additional information relevant to the error, making it convenient to check for specific types of errors.
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)) }
Ad Hoc Error Values
In situations where specific error conditions are not anticipated, it is possible to create new error values on the fly using the errors.New() function. This method returns an error value with a custom error message.
func SomepackageFunction() error { return errors.New("not implemented") }
Using Standard Errors
Go provides a limited set of standard errors defined in its packages. These errors are often used when implementing interfaces or adhering to specific standards. However, it is generally recommended to define custom errors for more specific error conditions within packages.
func SomeFunc() error { return io.EOF }
Error Interfaces
Go also allows for the creation of error interfaces that define common error behaviors. These interfaces enable the checking of errors for specific properties.
type Error interface { error Timeout() bool // Is the error a timeout? Temporary() bool // Is the error temporary? }
Error Wrapping in Go 1.13
Since Go 1.13, it is possible to wrap existing errors with context or additional information. This simplifies error handling by providing more context to users without the need for extensive custom error types.
func SomepackageFunction() error { err := somethingThatCanFail() if err != nil { return fmt.Errorf("some context: %w", err) } }
By following these idiomatic practices, developers can effectively handle errors in their Go code, ensuring clear and manageable error handling mechanisms.
The above is the detailed content of How Do Idiomatic Go Practices Address Error Handling?. For more information, please follow other related articles on the PHP Chinese website!