## 格式
格式化是一個最具爭議,但又無關緊要的問題。人們可以習慣于不同的格式風格。但是,最好不必這樣,這就不用在每個人是否遵守相同風格的話題上花費時間了。問題是在沒有一個長效的風格指導下,如何達到這樣美好的烏托邦。
對于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
~~~
的含義就已經由空格表明了。這不像其它語言。