Go error handling
The Go language provides a very simple error handling mechanism through the built-in error interface.
The error type is an interface type, this is its definition:
type error interface { Error() string }
We can generate error information by implementing the error interface type in coding.
Functions usually return error information in the final return value. Using errors.New can return an error message:
func Sqrt(f float64) (float64, error) { if f < 0 { return 0, errors.New("math: square root of negative number") } // 实现 }
In the following example, we pass a negative number when calling Sqrt, and then get a non-nil error object, and compare this object with nil Comparison, the result is true, so fmt.Println (the fmt package will call the Error method when processing errors) is called to output the error. Please see the sample code called below:
result, err:= Sqrt(-1) if err != nil { fmt.Println(err) }
Example
package main import ( "fmt" ) // 定义一个 DivideError 结构 type DivideError struct { dividee int divider int } // 实现 `error` 接口 func (de *DivideError) Error() string { strFormat := ` Cannot proceed, the divider is zero. dividee: %d divider: 0 ` return fmt.Sprintf(strFormat, de.dividee) } // 定义 `int` 类型除法运算的函数 func Divide(varDividee int, varDivider int) (result int, errorMsg string) { if varDivider == 0 { dData := DivideError{ dividee: varDividee, divider: varDivider, } errorMsg = dData.Error() return } else { return varDividee / varDivider, "" } } func main() { // 正常情况 if result, errorMsg := Divide(100, 10); errorMsg == "" { fmt.Println("100/10 = ", result) } // 当被除数为零的时候会返回错误信息 if _, errorMsg := Divide(100, 0); errorMsg != "" { fmt.Println("errorMsg is: ", errorMsg) } }
Execute the above program, the output result is:
100/10 = 10 errorMsg is: Cannot proceed, the divider is zero. dividee: 100 divider: 0