主要问题

err 重定义

  1. func testErrors() error {
  2. if err := exampleError(); err != nil {
  3. return err
  4. }
  5. if err := exampleError(); err != nil {
  6. return err
  7. }
  8. if err := exampleError(); err != nil {
  9. return err
  10. }
  11. // err 不能在此处使用
  12. return nil
  13. }

err != nil 检查

  1. func testErrors() error {
  2. err := exampleError()
  3. if err != nil {
  4. return err
  5. }
  6. return nil
  7. }

解决方案

check 方法

  1. func testErrors() (err error) {
  2. defer func() {
  3. if r := recover(); r != nil {
  4. err = fmt.Errorf("testErrors caught error: %+v", r)
  5. }
  6. }()
  7. check := func(err error) {
  8. if err != nil {
  9. panic(err)
  10. }
  11. }
  12. check(exampleError())
  13. check(exampleError())
  14. check(exampleError())
  15. return nil
  16. }