格式化
格式化问题是最具争议但又无足轻重的问题。人们可以适应不同的格式风格,但无需适应岂不是更好,而且如果每个人都遵守相同的风格,就可以减少用于这类问题的时间。问题在于如何在没有长篇规范性风格指南的情况下实现这一设想。
在 Go 中我们另辟蹊径,让机器来处理大部分的格式化问题。gofmt 程序(也可用 go fmt,它以包为处理对象而非源文件)将 Go 程序按照标准风格缩进、 对齐,保留注释并在需要时重新格式化。若你想知道如何处理一些新的代码布局,请尝试运行 gofmt;若结果仍不尽人意,请重新组织你的程序(或提交有关 gofmt 的 Bug),而不必为此纠结。
举例来说,你无需花时间将结构体中的字段注释对齐,gofmt 将为你代劳。 假如有以下声明:
go
type T struct {
name string // 对象名
value int // 对象值
}gofmt 将行按列对其
go
type T struct {
name string // 对象名
value int // 对象值
}标准包中所有的 Go 代码都已经被 gofmt 格式化过了。
一些格式细节仍然保留。简言之:
Indentation(缩进) 我们使用制表符(Tab)进行缩进,并且 gofmt 默认情况下会触发它们。仅在你必要时才使用空格。
Line length(行长) Go 对行长无限制,无需担心打孔卡溢出。如果感觉某行太长,请将其换行并用一个额外的制表符缩进。
Parentheses(括号) 比起 C 和 Java, Go 需要的括号更少:控制结构(if、for、switch)的语法中没有括号。此外,运算符优先级层次结构更短、更清晰,因此
go
x<<8 + y<<16与其他语言不同,这就是空格的含义。