Go语言精进之路:从新手到高手的编程思想、方法和技巧(1)
上QQ阅读APP看书,第一时间看更新

6.1 gofmt:Go语言在解决规模化问题上的最佳实践

gofmt的代码风格不是某个人的最爱,而是所有人的最爱。

——Rob Pike

Go语言设计的目标之一是解决大型软件系统的大规模协作开发问题,也就是说Go语言不仅要让独立开发人员使用起来感觉良好,还要将这个良好的体验扩展到拥有一定规模的团队甚至是大型开发团队。Go核心团队将这类问题归结为一个词——规模化(scale),这也是近几年比较火热的Go2演进方案将主要解决的问题[1]

gofmt是伴随着Go语言的诞生而在“规模化”这个目标上进行的第一批实践和尝试。它试图“消灭”软件开发过程中阻碍“规模化”的问题,即开发人员在编程语言代码风格上的无休止且始终无法达成一致的争论,以及不同代码风格给开发人员在阅读和维护他人代码时带来的低效。gofmt先入为主地将一种统一的代码风格内置到Go语言之中,并将其与Go语言一起以一种“标准”的形式推广给所有Go开发者。

在Go语言诞生和推广的初期,也许会有开发人员因gofmt所格式化出来的统一代码风格与自己喜好的风格不一致而抱怨,但随着Go影响力的扩大以及采用gofmt标准代码风格的代码的累积,Go开发者们渐渐注意到关于其他编程语言的那种针对代码风格的“争吵”变少了甚至消失了。在一致的代码风格下,Go开发人员阅读和维护他人代码时不再感到陌生,效率也变得更高了,gofmt的代码风格成为了所有人的最爱,以至于在Go的世界里代码风格已经没有了存在感。

gofmt代码风格已经成为Go开发者的共识,融入Go语言的开发文化当中,以至于多数Go开发者可能说不出gofmt代码风格是什么样的,因为代码会被gofmt自动变成那种风格,大家已经不再关心风格。gofmt是Go语言在解决规模化问题上的一个最佳实践,并成为Go语言吸引其他语言开发者的一大亮点。很多主流语言在效仿Go语言而推出自己的格式化工具,比如Java formatter、Clang formatter、Dartfmt等。作为Go开发人员,请在提交代码前使用gofmt进行格式化。