Go一些tips

处理错误最直接的方式是通过错误码

C 语言,其通过函数的返回值标识是否有错
       然后通过全局的 errno 变量并配合一个 errstr 的数组来告诉你为什么出错。

Go语言的错误处理

Go 语言的函数支持多返回值, 可以在返回接口把业务语义(业务返回值)和控制语义(出错返回值)区分开来。

Go 语言的很多函数都会返回 result, err 两个值

参数上基本上就是入参,而返回接口把结果和错误分离,这样使得函数的接口语义清晰;

Go 语言中的错误参数如果要忽略,需要显式地忽略,用 _ 这样的变量来忽略;

因为返回的 error 是个接口(其中只有一个方法 Error(),返回一个 string ),所以你可以扩展自定义的错误处理
if err != nil {
  switch err.(type) {
    case *json.SyntaxError:
      ...
    case *ZeroDivisionError:
      ...
    case *NullPointerError:
      ...
    default:
      ...
  }
}

资源清理

使用 defer 关键词进行清理。


func Close(c io.Closer) {
  err := c.Close()
  if err != nil {
    log.Fatal(err)
  }
}
func main() {
  r, err := Open("a")
  if err != nil {
    log.Fatalf("error opening 'a'\n")
  }
  defer Close(r) // 使用defer关键字在函数退出时关闭文件。
  r, err = Open("b")
  if err != nil {
    log.Fatalf("error opening 'b'\n")
  }
  defer Close(r) // 使用defer关键字在函数退出时关闭文件。
}

转自酷 壳 – COOLSHELL

Buy me a 肥仔水!