![83fb43b4a456326b512bf21ca452316a.png](https://img-blog.csdnimg.cn/img_convert/83fb43b4a456326b512bf21ca452316a.png)
1.Go是一门区分大小写的语言
命名规则涉及变量、常量、全局函数、结构、接口、方法等的命名。 Go语言从语法层面进行了以下限定:任何需要对外暴露的名字必须以大写字母开头,不需要对外暴露的则应该以小写字母开头。
当命名(包括常量、变量、类型、函数名、结构字段等等)以一个大写字母开头,如:SetupRouter,那么使用这种形式的标识符的对象就可以被外部包的代码所使用(客户端程序需要先导入这个包),这被称为导出(像面向对象语言中的 public);
命名如果以小写字母开头,则对包外是不可见的,但是他们在整个包的内部是可见并且可用的(像面向对象语言中的 private )。
2. 包名称
最好保持package的名字和目录保持一致,尽量采取有意义的包名,简短,有意义,尽量和标准库不要冲突。包名应该为小写单词,尽量不要使用下划线或者混合大小写。
package controller
3. 文件命名
尽量采取有意义的文件名,简短,有意义,应该为小写单词,使用下划线分隔各个单词。
user_controller.go
4. 结构体命名
采用驼峰命名法,首字母根据访问控制大写或者小写。
type UserInfo struct {
Name string `gorm:"type:varchar(20);not null"`
Telephone string `gorm:"type:varchar(11);not null;unique"`
Password string `gorm:"size:255;not null"`
}
5. 接口命名
命名规则基本和上面的结构体类型类似
单个函数的结构名以 “er” 作为后缀,例如 Reader , Writer 。
package fmt
// Stringer is implemented by any value that has a String method,
// which defines the ``native'' format for that value.
// The String method is used to print values passed as an operand
// to any format that accepts a string or to an unformatted printer
// such as Print.
type Stringer interface {
String() string
}
6. 变量命名
和结构体类似,变量名称一般遵循驼峰法,首字母根据访问控制原则大写或者小写,但遇到特有名词时,需要遵循以下规则:
如果变量为私有,且特有名词为首个单词,则使用小写,如 appService;
若变量类型为 bool 类型,则名称应以 Has, Is, Can 或 Allow 开头。
var isExist bool
var hasConflict bool
var canManage bool
7.方法的接收器命名
下面的代码里那个附加的参数p,叫做方法的接收器(receiver)
在Go语言中,我们并不会像其它语言那样用this或者self作为接收器;我们可以任意的选择接收器的名字。由于接收器的名字经常会被使用到,所以保持其在方法间传递时的一致性和简短性是不错的主意。这里的建议是可以使用其类型的第一个字母,比如这里使用了Point的首字母p。
type Point struct{ X, Y float64 }
func (p Point) Distance(q Point) float64 {
return math.Hypot(q.X-p.X, q.Y-p.Y)
}