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

Cloud001 · 2020年02月04日 · 49 次阅读

本文最早由 davecheney 发表于 GopherCon Israel 2020,今天早上在 GitHub 上开源,https://github.com/davecheney/the-zen-of-go/blob/master/the-zen-of-go.adoc

Dave Cheney 是谁?

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

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

更多原创文章干货分享,请关注公众号
  • 加微信实战群请加微信(注明:实战群):gocnio
暂无回复。
需要 登录 后方可回复, 如果你还没有账号请点击这里 注册