Go中的自定义错误处理

Tom*_*ick 4 error-handling go

我一直在阅读这篇博文,但我仍然不相信我确切地知道该怎么做以获得自定义错误,我可以从我的函数返回并处理它们之外的错误.

这就是我目前正在做的事情:

func doSomething() int {
    x := 0
    // Do something with x.
    ...
    if somethingBadHappened {
        return -1
    }
    if somethingElseBadHappened {
        return -2
    }
    return x
}
Run Code Online (Sandbox Code Playgroud)

这就是我想要做的事情:

func doSomething() int, ? {
    ...
    if somethingBadHappened {
        return ?, err
    }
    if somethingElseBadHappened {
        return ?, err2
    }
    return x, nil
}
Run Code Online (Sandbox Code Playgroud)

但我不确定如何以及如何用这些问题取代这些问号.

小智 8

如果你不想,你真的不需要返回一个int.你可以这样做:

func doSomething() error {
  ...
  if somethingBadHappened {
      return errors.New("something bad happened")
  }
  if somethingElseBadHappened {
      return errors.New("something else bad happened")
  }
  return nil
}
Run Code Online (Sandbox Code Playgroud)

或者如果你想返回整数

func doSomething() (int, error) {
  ...
  if somethingBadHappened {
      return -1, errors.New("something bad happened")
  }
  if somethingElseBadHappened {
      return -2, errors.New("something else bad happened")
  }
  return x, nil
}
Run Code Online (Sandbox Code Playgroud)

一定要import "errors"在顶部.

如果你想测试是否有错误,你可以做

x, err := doSomething()
if err != nil {
  log.Println(err)
}
Run Code Online (Sandbox Code Playgroud)