**Go **语言编码规范
一. 命令规范
1**、包命名:package**
保持package的名字和目录保持一致,尽量采取有意义的包名,简短,有意义,尽量和标准库不要冲突。包名应该为小写单词,不要使用下划线或者混合大小写。
2**、文件命名**
尽量采取有意义的文件名,简短,有意义,应该为小写单词,使用下划线分隔各个单词。例:data_query.go
非单元测试文件不要以_test结尾,go编译器默认x_test.go为单元测试文件,不会进行编译。
3**、变量命令**
变量:采用驼峰法,通过首字母大小写来控制是否包外可见
常量:均需使用全部大写字母组成,并使用下划线分词
const API_VERSION=“1.1”
接口命名
-
单个函数的接口名以"er"作为后缀,例如type Reader interface {…}
-
两个函数的接口名综合两个函数名,例如type WriteFlusher interface {…}
-
三个以上函数的接口名,类似于结构体名,例如type Car interface {…}
特殊名词的首字母缩写需要按照规范来,例如URLProxy或者urlProxy不要命名为UrlProxy。
二. 格式化
Goland 推荐使用插件 save actions,其他IDE 使用gofmt,goimports
三. 注释
多写关键函数的注释,活用**//TODO,//FIXME**
四. 包引入
1、如果你的包引入了三种类型的包,标准库包,程序内部包,第三方包,建议采用如下方式进行组织你的包
import (
"encoding/json"
"strings"
"myproject/models"
"myproject/controller"
"myproject/utils"
"github.com/astaxie/beego"
"github.com/go-sql-driver/mysql"
)
不同的类型采用空格分离,第一种实标准库,第二是项目包,第三是第三方包。
2、在项目中不要使用相对路径引入包,使用绝对路径引入包
3、不要使用 . 来省略包名引用
五.缩进
为了保证最小的代码缩进和代码可读性,有一些缩进的规范,如下所示
if err != nil {
error
handling
} else {
normal code
}
正确的写法
if err != nil {
error handling
return
}
normal code
六.其他
1、receiver命名最多2个字母,不能使用me或者self或者this,例如func (c *Client) GetUserName() string
2、每行代码长度最好不超过80个字符,如果超过建议换行
3、函数返回值采用返回"指针"类型而不是返回"值"类型(推荐但不强制)
4、错误处理的原则是不能忽略任何error,不要使用"_"丢弃,必须全部处理。接收到错误,要么返回error给上层调用,要么使用log打印对应的error和warn信息(强制)
5、没十分必要不能panic,进程开始的处理函数可以panic
6、任何一个goroutine都应该有recover来保护程序不会因为panic而crash,因为任何一个goroutine如果抛panic但没有recover整个程序会crash
7、注意闭包的使用,在循环中调用函数或者goroutine方法,一定要采用显示的变量调用,不要再闭包函数里面调用循环的参数
后续待补充中!