设计特征:

  1. 在编译时,会检查预编译错误,存在错误时编译器将抛出到标准输出,并修改程序。
  2. 在程序运行期间产生的错误(如数组访问越界、空指针引用等):
    • 大部分可能造成错误的函数:错误时返回一个错误接口(error),在成功时返回 nil。
    • 重大错误已影响程序的函数:使用 defer、panic、recover 来处理异常,根情况决定宕机还是恢复。

开发建议:

  1. Go语言希望开发者将错误处理视为正常开发必须实现的环节,正确地处理每一个可能发生错误的函数。应合理谨慎使用 panic,大部分情况采用 error 错误返回机制。
  2. Go语言使用返回值返回 error 错误的机制,也能大幅降低编译器、运行时处理错误的复杂度,让开发者真正地掌握错误的处理。
  3. Go语言没有类似 Java 或 .NET 中的异常处理机制,虽然可以使用 defer、panic、recover 模拟,但官方并不主张这样做,Go语言的设计者认为其他语言的异常机制已被过度使用,上层逻辑需要为函数发生的异常付出太多的资源,同时,如果函数使用者觉得错误处理很麻烦而忽略错误,那么程序将在不可预知的时刻崩溃。