【golang笔记】go_error处理(8)

Page content

这一篇简单的整理了golang错误处理相关的内容。

1.错误处理

错误可以使用defer, recover, panic 做处理。

package main

import (
 "fmt"
)

func test() {
 defer func() {
  err := recover()
  if err != nil {
   fmt.Println(err)
  }
 }()

 var n1 int = 10
 var n2 int = 0
 fmt.Println(n1 / n2) //这边出错,直接走了 recover 不走下面的方法了

 fmt.Println("haha....")

 fmt.Println(n1 / n2)
}

func main() {

 test()
 fmt.Println("执行到最后了....")
}

执行结果

$ go run main.go
runtime error: integer divide by zero
执行到最后了....

2.自定义error

error类型是一个接口类型。

type error interface {
    Error() string
}

所以我们只要实现了Error()方法就能自定义实现error。

下面举了一个简单的例子。

package main

import (
 "errors"
 "fmt"
)

type MyError struct {
 level   int8
 message string
 err     error
}

func (e *MyError) Error() string {
 if e.message != "" {
  return fmt.Sprintf("MyError => level: %d  mesage: %s  err: %v", e.level, e.message, e.err)
 }
 return e.err.Error()
}

func test(isErr bool) error {
 if isErr {
  return &MyError{level: 1, message: "我的自定义错误", err: errors.New("错误")}
 } else {
  return nil
 }
}

func main() {
 err := test(true)
 if err != nil {
  fmt.Println(err)
 }
}

欢迎大家的意见和交流

email: li_mingxie@163.com