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 ELGamal和paillier计算效率谁快?
  • ¥15 file converter 转换格式失败 报错 Error marking filters as finished,如何解决?
  • ¥15 ubuntu系统下挂载磁盘上执行./提示权限不够
  • ¥15 Arcgis相交分析无法绘制一个或多个图形
  • ¥15 关于#r语言#的问题:差异分析前数据准备,报错Error in data[, sampleName1] : subscript out of bounds请问怎么解决呀以下是全部代码:
  • ¥15 seatunnel-web使用SQL组件时候后台报错,无法找到表格
  • ¥15 fpga自动售货机数码管(相关搜索:数字时钟)
  • ¥15 用前端向数据库插入数据,通过debug发现数据能走到后端,但是放行之后就会提示错误
  • ¥30 3天&7天&&15天&销量如何统计同一行
  • ¥30 帮我写一段可以读取LD2450数据并计算距离的Arduino代码