行长度
一行代码不要超过120列,超过的情况,使用合理的方法换行。
例外场景:
- import 模块语句
- struct tag
- 工具生成的代码
换行方式
采用惰性换行,换行前应尽可能占满当前行不留空位。
// Bad
fmt.Printf("%v %v %v %v %v %v %v %v %v %v %v %v %v %v\n",
0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55,89, 144, 233)
// Good
fmt.Printf("%v %v %v %v %v %v %v %v %v %v %v %v %v %v\n", 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55,
89, 144, 233)
不必要的空行
- 函数体第一行不要换行。
// Bad
func foo() {
// func body
}
// Good
func foo() {
// func body
}
- 函数调用和对调用结果的处理,是紧密相连的,不能加空行。
// Bad
res, err := foo()
if err != nil || res.Ret != 0 {
return
}
// Good
res, err := foo()
if err != nil || res.Ret != 0 {
return
}
- return 语句前不要换行。
// Bad
func foo() {
// func body
return
}
// Good
func foo() {
// func body
return
}
括号和空格
- 遵循 gofmt 的逻辑。
- 运算符和操作数之间要留空格。
- 作为输入参数或者数组下标时,运算符和操作数之间不需要空格,紧凑展示。
var i int = 1 + 2 // 运算符和操作数之间要留空格
v := []float64{1.0, 2.0, 3.0}[i-i] // i-i 作为下标不留空格
fmt.Printf("%f\n", v+1) // v+1 作为入参不要留空格
- 不要添加没必要的括号。
// Bad
if foo && (int(bar) > 0) {
// ...
}
// Good
if foo && int(bar) > 0 {
// ...
}
行数
- 函数长度不能超过 80 行。
- 文件长度不能超过 800 行。