2021
建信金科 智能云事业部 产品创新和云技术团队
2021-01-25
格式化
使用golint
进行go代码的检测
使用go vet静态分析代码问题
log
log定向到标准输出 SetOutput(os.Stdout)
import (
log "github.com/sirupsen/logrus"
"os"
)
func init() {
log.SetFormatter(&log.JSONFormatter{})//设置日志的输出格式为json格式,还可以设置为text格式
log.SetOutput(os.Stdout)//设置日志的输出为标准输出
log.SetLevel(log.InfoLevel)//设置日志的显示级别,这一级别以及更高级别的日志信息将会输出
}
GOPATH
文件命名,目录名(包名)
_test.go
结尾常量命名
使用全大写且用下划线分词,比如 APP_VERSION
如果要定义多个变量,请使用 括号 来组织
const (
APP_VERSION = "0.1.0"
CONF_PATH = "/etc/xx.conf"
)
变量命名
函数命名
接口命名
注释
context
goroutine
函数返回值
copy
传值
包导入
多个包导入,请使用 {}
来组织
import {
"fmt"
"os"
}
标准库排最前面,第三方包次之、项目内的其它包和当前包的子包排最后,每种分类以一空行分隔
不要使用相对路径来导入包
错误处理
_
丢弃,必须全部处理if
闭包
在循环中调用函数或者goroutine方法,一定要采用显示的变量调用,不要再闭包函数里面调用循环的参数
for i:=0;i<limit;i++{
go func(){ DoSomething(i) }() //错误的做法
go func(i int){ DoSomething(i) }(i)//正确的做法
}
recieved是值类型还是指针类型
func(w Win) Tally(playerPlayer)int //w不会有任何改变
func(w *Win) Tally(playerPlayer)int //w会改变数据
如果定义的struct中带有mutex,那么你的receivers必须是指针