自己是 Java 后台开发,尝试用 Go 写了个小项目,有几个工程实践上的问题想咨询下各位都是怎么处理的?
- 如何统一各组件的 log 输出?例如我用 echo 、xorm 、grpc 去构建业务,这三个库的日志格式各自不同,Go 生态中有没有类似 slf4j 的东西能让三者用同一种日志规范输出?
- 如何在 log 中附上当前每一个 http 请求的 requestId 呢?不能是靠 Context 层层往下传吧? Java 中是依赖于日志框架 MDC 实现的,相关 requestId 会绑定在线程上,线程模型可能会有性能问题,但对于开发者写代码来说还是挺友好的。
- 如何妥善的处理异常?业务代码中的常见操作就是读数据、执行业务逻辑、保存新数据,这个过程中任何一步有异常我都可以认为是业务处理异常,Java 中只需要把这三步全部 try catch 起来就行了(只是个例子,实际处理粒度不会这么大),但 Go 中只能每一步都冒泡,然后写很多次
if err != nil么?
抛开工程上的这些问题,Go 还是蛮好的,找回了刚上学时候写 C 的快感,真就是单纯地在一行一行写代码,感觉每一行都能映射到汇编上,掌控性很强。感觉更适合强规范的基础设施开发和工具开发。
接下来想去看看 Rust ,不知道会不会遇到类似的问题。毕竟语言再好,最终还是要用来干活儿的。对于业务开发,CRUD boy 来说,写代码和查问题这种场景搞不定,语言再好也是麻烦。