Go编码规范
1. 代码风格
1.1 代码格式
- 代码都必须用
gofmt进行格式化。 - 运算符和操作数之间要留空格。
- 建议一行代码不超过 120 个字符,超过部分,请采用合适的换行方式换行。但也有些例外场景,例如 import 行、工具自动生成的代码、带 tag 的 struct 字段。
- 文件长度不能超过 800 行。
- 函数长度不能超过 80 行。
- import 规范
- 代码都必须用
goimports进行格式化(建议将代码 Go 代码编辑器设置为:保存时运行goimports)。 - 不要使用相对路径引入包,例如
import ../util/net。 - 包名称与导入路径的最后一个目录名不匹配时,或者多个相同包名冲突时,则必须使用导入别名。
- 代码都必须用
// bad
"github.com/dgrijalva/jwt-go/v4"
//good
jwt "github.com/dgrijalva/jwt-go/v4"- 导入的包建议进行分组,匿名包的引用使用一个新的分组,并对匿名包引用进行说明。
import (
// go 标准包
"fmt"
// 第三方包
"github.com/jinzhu/gorm"
"github.com/spf13/cobra"
"github.com/spf13/viper"
// 匿名包单独分组,并对匿名包引用进行说明
// import mysql driver
_ "github.com/jinzhu/gorm/dialects/mysql"
// 内部包
v1 "github.com/marmotedu/api/apiserver/v1"
metav1 "github.com/marmotedu/apimachinery/pkg/meta/v1"
"github.com/marmotedu/iam/pkg/cli/genericclioptions"
)1.2 声明、初始化和定义
当函数中需要使用到多个变量时,可以在函数开始处使用var声明。在函数外部声明必须使用 var ,不要采用 := ,容易踩到变量的作用域的问题。