Golang Go语言1 如何实用地错误处理(Error Handling and Go 1)
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)/
Golang Go语言1 如何实用地错误处理(Error Handling and Go 1)
更多关于Golang Go语言1 如何实用地错误处理(Error Handling and Go 1)的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
lz 你们在生产上用 nats 了?
更多关于Golang Go语言1 如何实用地错误处理(Error Handling and Go 1)的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
用了,用于日志等负载大容忍丢失的场景
会丢?主要是想了解一下 streaming server 吞吐能力跟可靠性
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
集群你们使用下来有什么坑吗
我感觉是这样一整个正常流程走下来很流畅,另外如果有几十个错误这样嵌套起来这代码没法写也没法看 ̄  ̄)σ
- 客户端设置 client_id 的坑. 2. Unsubscribe 和 Close 的坑: Unsubscribe 会在 server 端移除该 subject 的持久化, Close 不会. 集群方面的坑暂时没遇到, 这个 readme 一定要看 https://github.com/nats-io/nats-streaming-server/blob/master/README.md
在Golang(Go语言)中,错误处理是一个关键且实用的编程概念,特别是在Go 1及后续版本中。Go语言通过内置的error
类型和一系列惯用法来处理错误,这使得错误处理既灵活又强大。
-
返回错误:Go中的函数经常通过返回两个值来处理错误,其中第二个值通常是
error
类型。这种设计允许调用者检查并处理错误。 -
使用
if
语句检查错误:调用函数后,应立即使用if
语句检查返回的错误是否为nil
。如果错误不为nil
,则执行相应的错误处理逻辑。 -
自定义错误:通过实现
error
接口(即Error()
方法),可以创建自定义错误类型,这有助于提供更丰富和有意义的错误信息。 -
错误包装与追踪:在Go 1.13及更高版本中,可以使用
fmt.Errorf
和%w
动词来包装错误,这有助于保留原始错误的上下文和堆栈信息,便于调试。 -
使用
panic
和recover
:虽然不常用于常规错误处理,但在某些情况下(如不可恢复的错误),可以使用panic
来中断程序执行,并通过recover
在defer函数中恢复。 -
日志记录:在处理错误时,使用日志记录库(如
log
、zap
或logrus
)来记录错误信息,这对于生产环境中的故障排查非常有用。
总之,Go语言的错误处理机制简洁而强大,通过遵循上述最佳实践,可以编写出健壮且易于维护的代码。