Skip to content

格式化

格式化问题是最具争议但又无足轻重的问题。人们可以适应不同的格式风格,但无需适应岂不是更好,而且如果每个人都遵守相同的风格,就可以减少用于这类问题的时间。问题在于如何在没有长篇规范性风格指南的情况下实现这一设想。

在 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
与其他语言不同,这就是空格的含义。