duanbai1974 2016-11-15 14:15
浏览 38
已采纳

在Go中处理错误

I've worked with Go for a while now and has yet to really nail how I work with errors.

Even the standard library has a number of different ways to deal with errors (some not even making it possible to inspect the errors without having to resort to string matching).

I've recently read the blog post Inspecting Errors by Dave Cheney. This sounds like its a step in the right direction, but I'm still having a hard time really putting it to real use.

Say I have made a package a that does requests to a 3rd party REST API (such as Facebook Graph for instance). I'd like this package to expose functions matching those of the API - lets say GetUser.

Calling GetUser can have a number of outcomes:

  1. Success
  2. Failed due to request failure like 3rd party API being down
  3. 3rd party API returned an error (like user not found)
  4. Deserialization of response or similar failed

Asserting the error for behaviour works very well in the second case. However it falls short in distinguishing between the third and fourth case.

My current use case is implementing my own REST API that use this first package. In this case I'd like be able to return 200 OK, 503 Service Unavailable, 400 Bad Request, 500 Internal Server Error responses respectively to the possible outcomes.

What would be a good general approach to solving this problem without having to include returning http response codes or similar from package a?

  • 写回答

2条回答 默认 最新

  • duanjing1023 2016-11-22 08:26
    关注

    After working with this for a while without coming any closer to a solution that feels just right I'm coming to terms with there not being a good single solution for this.

    I guess this might also be what Dave Cheney means by:

    However, I have concluded that there is no single way to handle errors.

    Since I still want to avoid type asserting the error due to the dependency challenges that brings I've ended up introducing an Internal() bool behaviour similar to the Temporary() bool pattern mentioned in the linked articles.

    This at least allow me to assert the behavior without being forced to import the package that originally created the error.

    It's not the best fit, but it will have to do for now.

    Ainar-G's answer is worth taking a look at as well.

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 HFSS 中的 H 场图与 MATLAB 中绘制的 B1 场 部分对应不上
  • ¥15 如何在scanpy上做差异基因和通路富集?
  • ¥20 关于#硬件工程#的问题,请各位专家解答!
  • ¥15 关于#matlab#的问题:期望的系统闭环传递函数为G(s)=wn^2/s^2+2¢wn+wn^2阻尼系数¢=0.707,使系统具有较小的超调量
  • ¥15 FLUENT如何实现在堆积颗粒的上表面加载高斯热源
  • ¥30 截图中的mathematics程序转换成matlab
  • ¥15 动力学代码报错,维度不匹配
  • ¥15 Power query添加列问题
  • ¥50 Kubernetes&Fission&Eleasticsearch
  • ¥15 報錯:Person is not mapped,如何解決?