V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
The Go Programming Language
http://golang.org/
Go Playground
Go Projects
Revel Web Framework
freestyle
V2EX  ›  Go 编程语言

Go1 如何实用地错误处理(Error Handling and Go 1)

  •  
  •   freestyle ·
    hanjm · 2018-09-01 09:43:52 +08:00 · 3237 次点击
    这是一个创建于 2280 天前的主题,其中的信息可能已经有所发展或是发生改变。

    4 月 GopherChina 大会上 Marcel 首次公开了Go2 的错误处理改进的初步想法, 最近官方发布了 Go2 草案, 要改善错误处理, 给了多种社区和官方的设计方案, GoCN 分享的每日新闻中讨论 Go 语言的错误处理文章也多了起来:
    1. handling-more-than-just-errors-in-go
    2. error-handling-go
    3. exploring-error-handling ...

    我也来分享下我对 Go 错误处理的理解和实践经验, 实用为主, 目标是看到错误日志能快速定位问题, 减轻错误处理的负担, 使用效果不错. 代码是去年写的, 博客是 7 月写的...
    文章: https://hanjm.github.io/2018/07/08/Go%E5%A6%82%E4%BD%95%E4%BC%98%E9%9B%85%E5%9C%B0%E9%94%99%E8%AF%AF%E5%A4%84%E7%90%86(Error%20handling%20and%20Go%201)/

    包: https://github.com/hanjm/errors

    9 条回复    2018-09-01 19:25:56 +08:00
    janxin
        1
    janxin  
       2018-09-01 11:26:59 +08:00 via iPad
    lz 你们在生产上用 nats 了?
    freestyle
        2
    freestyle  
    OP
       2018-09-01 12:24:39 +08:00 via iPhone
    @janxin 用了,用于日志等负载大容忍丢失的场景
    janxin
        3
    janxin  
       2018-09-01 12:58:08 +08:00 via iPad
    @freestyle 会丢?主要是想了解一下 streaming server 吞吐能力跟可靠性
    freestyle
        4
    freestyle  
    OP
       2018-09-01 15:18:59 +08:00
    @janxin nats 是网络和内存 buffer, 不落盘, 消费者处理不过来就丢, topic 没有消费者消费就丢. nats streaming 则是累积到服务端设置最大消息数量 /大小就丢. 吞吐很好, 实际应用中单机达到上限了, 可以拆分 topic 或者集群, nats 的通配符订阅很赞 具体的性能可以用 bench 在你的机器上分别测一下 https://github.com/nats-io/go-nats/blob/master/examples/nats-bench.go https://github.com/nats-io/go-nats-streaming/blob/master/examples/stan-bench/main.go
    azzwacb9001
        5
    azzwacb9001  
       2018-09-01 17:53:03 +08:00
    感谢分享!想跟楼主交流一个事情,我看到 Go 的 code style 建议里说,不要在错误返回的 else 块里做“正常情况下的功能代码”

    e.g.

    ```
    if err != nil {
    xxx
    } else {
    // 如果没有报错的情况下要执行的代码
    }
    ```

    而是应该把 else 中的代码给抽出来,直接放在外边。
    为什么要这么做呢?道理是什么呢?
    janxin
        6
    janxin  
       2018-09-01 18:26:36 +08:00 via iPad
    @freestyle 集群你们使用下来有什么坑吗
    miniliuke
        7
    miniliuke  
       2018-09-01 18:33:49 +08:00 via Android   ❤️ 1
    @azzwacb9001 我感觉是这样一整个正常流程走下来很流畅,另外如果有几十个错误这样嵌套起来这代码没法写也没法看 ̄  ̄)σ
    freestyle
        8
    freestyle  
    OP
       2018-09-01 19:21:00 +08:00   ❤️ 1
    @azzwacb9001 及时 return, 免得面条式代码, 提高可读性
    freestyle
        9
    freestyle  
    OP
       2018-09-01 19:25:56 +08:00
    @janxin 1. 客户端设置 client_id 的坑. 2. Unsubscribe 和 Close 的坑: Unsubscribe 会在 server 端移除该 subject 的持久化, Close 不会. 集群方面的坑暂时没遇到, 这个 readme 一定要看 https://github.com/nats-io/nats-streaming-server/blob/master/README.md
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5751 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 03:32 · PVG 11:32 · LAX 19:32 · JFK 22:32
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.