如何优雅的在 Golang 中进行错误处理

如何优雅的在Golang中进行错误处理?

答案是:没有……(本文完)


开个玩笑,Golang中的错误处理方式一直是社区热烈讨论的话题,有力挺者,有抱怨者,但不论如何,自 2009 年Golang正式发布以来,关于错误处理就一直是现在这种状况。

随着Golang愈加的火爆,原本是JavaNodeC#等语言擅长的应用级开发领域也逐渐出现Golang的身影。Golang自身其实更加擅长做基础设施级开发,例如docker,例如k8s,再如etcd,它友好的内存管理和简单到粗暴的语法(25 个关键字),特别适合过去CC++这些语言所擅长的部分场景。我们有理由相信,Golang下一个大的引爆点将也许会在IoT上,因为它天然的适合。

当一门语言火起来,就会出现各式各样的应用,于是MVC框架有了,音视频处理库有了,各种数据库驱动有了,甚至服务框架也出现了,游戏、Machine Learning都不在话下,还要啥自行车?组合一下做应用级开发妥妥的没毛病。

但是,成也这 25 个关键字,败也这 25 个关键字,究其根本原因,都是因为它背后简单的哲学。

做应用级开发可不是那么简单的,这涉及到很多的细节处理,例如本文将要讨论的错误处理。如果只是写一个库,那么这个话题相对比较简单,因为与API打交道的都是开发者,你只管开心的往外扔error就好了,总会有倒霉的程序员在使用你的代码时DEBUG到白头,最后,以最严谨的方式,小心使用你的库;可是有人出现的地方就会有幺蛾子,一个常见的误区就是将业务错误运行时错误程序错误一股脑的当成相同的error来处理。

Read full post gblog_arrow_right

函数式编程中的常用技巧

在 Clojure、Haskell、Python、Ruby 这些语言越来越流行的今天,我们撇开其在数学纯度性上的不同,单从它们都拥有一类函数特性来讲,讨论函数式编程也显得很有意义。

一类函数为函数式编程打下了基础,虽然这并不能表示可以完整发挥函数式编程的优势,但是如果能掌握一些基础的函数式编程技巧,那么仍将对并行编程、声明性编程以及测试等方面提供新的思路。

很多开发者都有听过函数式编程,但更多是抱怨它太难,太碾压智商。的确,函数式编程中很多的概念理解起来都有一定的难度,最著名的莫过于[单子](https://en.wikipedia.org/wiki/Monad_(functional_programming),但是通过一定的学习和实践会发现,函数式编程能让你站在一个更高的角度思考问题,并在某种层面上提升效率甚至是性能。我们都知道飞机比汽车难开,但是开飞机却明显比开汽车快,高学习成本的东西解决的大部分是高回报的需求,这不敢说是定论,但从实践来看这句话基本也正确。

Read full post gblog_arrow_right

使用异步编程

导言

现代的应用程序面临着诸多的挑战,如何构建具有可伸缩性和高性能的应用成为越来越多软件开发者思考的问题。随着应用规模的不断增大,业务复杂性的增长以及实时处理需求的增加,开发者不断尝试榨取硬件资源、优化。

在不断的探索中,出现了很多简化场景的工具,比如提供可伸缩计算资源的 Amazon S31、Windows Azure2,针对大数据的数据挖掘工具 MapReduce3,各种CDN服务,云存储服务等等。还有很多的工程实践例如敏捷4、DDD5等提供了指导。可以看到,将每个关注层面以服务的方式提供,成为了越来越流行的一种模式,或许我们可以激进的认为,这就是 SOA6

开发者需要将不同的资源粘合在一起来提供最终的应用,这就需要协调不同的资源。

Read full post gblog_arrow_right