## 格式 格式化是一个最具争议,但又无关紧要的问题。人们可以习惯于不同的格式风格。但是,最好不必这样,这就不用在每个人是否遵守相同风格的话题上花费时间了。问题是在没有一个长效的风格指导下,如何达到这样美好的乌托邦。 对于Go,我们采取了不同寻常的方式,让机器来处理大多数的格式问题。程序`gofmt`(也可以用`go fmt`,其操作于程序包的级别,而不是源文件级别),读入一个Go程序,然后输出按照标准风格缩进和垂直对齐的源码,并且保留了根据需要进行重新格式化的注释。如果你想知道如何处理某种新的布局情况,可以运行`gofmt`;如果答案看起来不正确,则需要重新组织你的程序(或者提交一个关于`gofmt`的bug),不要把问题绕过去。 举个例子,不需要花费时间对结构体中每个域的注释进行排列。`Gofmt`将会替你完成这些。给定一个声明 ~~~ type T struct { name string // name of the object value int // its value } ~~~ `gofmt`将会按列进行排列: ~~~ type T struct { name string // name of the object value int // its value } ~~~ 标准程序包中的所有Go代码,都已经使用`gofmt`进行了格式化。 还是有一些格式化的细节的。非常简短: 缩进 我们使用tab进行缩进,这是`gofmt`的缺省输出。只有在你必须的时候才使用空格。 行长度 Go没有行长度限制。不必担心会有打孔卡片溢出。如果感觉一行太长,可以折成几行,并额外使用一个tab进行缩进。 括号 Go相比C和Java,很少需要括号:控制结构(`if`,`for`,`switch`)的语法不需要括号。而且,操作符优先级更短,更清晰。这样, ~~~ x<<8 + y<<16 ~~~ 的含义就已经由空格表明了。这不像其它语言。