Learn Golang in Days - Day 15-Go错误处理
简介
- Go语言通过内置错误接口提供了简单的错误处理机制
- error类型是一个接口类型,它的定义如下
type error interface {
Error() string
}
例子
package main
import "fmt"
import "errors"
func main() {
//var f = 3.4 //正确
var f float32 = -2.0
var n, err = sqrt(f)
if err != nil {
fmt.Printf("error, %s\n", err)
return
}
fmt.Printf("sqrt(%f) = %f\n", f, n)
}
func sqrt(f float32) (float32, error) {
if f < 0 {
fmt.Printf("err|| math,f < 0\n")
return 0, errors.New("math,f < 0")
}
return f * f, nil
}
复杂例子
- 定义结构体,实现Error接口
package main
import "fmt"
//定义结构体
type DivideError struct {
dividee int
divider int
}
//定义错误接口
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() {
fmt.Println("-----正常情况-------")
//正常情况
if result, errorMsg := Divide(100, 10); errorMsg == "" {
fmt.Println("100/10 = ", result)
}
fmt.Println("-----异常情况-------")
//当被除数为0的时候会返回错误信息
if _, errorMsg := Divide(100, 0); errorMsg != "" {
fmt.Println("errorMsg is: ", errorMsg)
}
}
有疑问加站长微信联系(非本文作者)