Dave Cheney:编写简单,可读,可维护的Go代码的十个工程建议

1,811 阅读3分钟

本文最早由davecheney发表于 GopherCon Israel 2020,今天早上在GitHub上开源,github.com/davecheney/…

Dave Cheney是谁?

Dave Cheney是Go编程语言的开源贡献者和项目成员。Dave Cheney是科技界备受尊重的代言人,他讲的是软件设计,性能和Go编程语言等各种主题。从2009年起,Dave Cheney就开始在世界各地写作,教学和演讲golang。Dave Cheney目前是VMware技术人员。在他的前公司收购之前,他曾在位于西雅图的公司Heptio担任工程师,专注于构建工具,帮助开发人员提高Kubernetes的工作效率。 更多了解Dave -> dave.cheney.net/about

编写简单,可读,可维护的Go代码的十个建议

Package的单一职责原则

对于一个Go package来说,好的设计是只表达一个主题,提供的是一系列与该主题相关的方法,并且具有规范的命名。试着把你package的名字想象成一个产品营销的演讲,尽量用一个最恰当的词来描述它所提供的内容。

错误的及时处理

健壮的代码总是能在程序崩溃之前及时地处理错误。尽管 if err!= nil { return err }冗长地出现在代码当中,但是它是非常有用的,总能在出错的地方及时给你一个反馈,所以不要抵触这种错误处理。不过对于panicrecover的使用来说,就要谨慎和克制一些。

及时返回避免嵌套

你每多一个条件嵌套,都会或多或少地对程序的性能造成影响,也会造成可读性的降低。所以尽量避免多层嵌套的控制流程。

是否使用并发由调用方决定

如果你的库使用了并发,让调用者选择是否要并发运行你的库或函数,不要强加于他们。

了解你的goroutine的生命周期

Goroutines占用的资源包括锁,变量,内存等。只有及时停止goroutine才能释放这些资源,所以你务必 了解你的goroutine的生命周期。

Avoid package level state

Seek to be explicit, reduce coupling, and spooky action at a distance by providing the dependencies a type needs as fields on that type rather than using package variables.(实在不知道怎么解释,就不误人子弟了)

简洁至上

简洁并不是复杂的反义词,而是意味着可读性和可维护性。在可能的情况下,选择更简洁的解决方案

测试用例是你package API的门面

尽管用户使用的是你的API,但是详尽的测试用例能够给用户足够的安全感。

Talk is cheap, show me your benchmark

有太多的代码打着提升性能的旗号而没有考虑其可维护性。要警惕过度优化带来的紧耦合、封装性差、可读性差的问题。如果你选择承担这些成本,一定要给出有说服力的理由。

克制是一种美德

适当地使用goroutines、channels、locks、interface、embedded等技术,切勿炫技。

可维护性

可维护性包括清晰,易读,简单等方面。你能想象到在你走后,你同事会如何看待你你留下的一坨代码吗?所以你现在就应该考虑一下如何让后面的人更容易地接手你的代码。

紧跟Go官方blog的步伐,追踪热点资讯,尽在go official blog。

如发现文中错误,可至公众号反馈(也欢迎技术交流),一经采纳有红包奉上哟。