命名规则

文件名

  • 整个应用或包的主入口文件应当是 main.go 或与应用名称简写相同。例如:Gogs 的主入口文件名为 gogs.go

函数或方法

  • 若函数或方法为判断类型(返回值主要为 bool 类型),则名称应以 Has, Is, CanAllow 等判断性动词开头:

    1. func HasPrefix(name string, prefixes []string) bool { ... }
    2. func IsEntry(name string, entries []string) bool { ... }
    3. func CanManage(name string) bool { ... }
    4. func AllowGitHook() bool { ... }

常量

  • 常量均需使用全部大写字母组成,并使用下划线分词:

    1. const APP_VER = "0.7.0.1110 Beta"
  • 如果是枚举类型的常量,需要先创建相应类型:

    1. type Scheme string
    2. const (
    3. HTTP Scheme = "http"
    4. HTTPS Scheme = "https"
    5. )
  • 如果模块的功能较为复杂、常量名称容易混淆的情况下,为了更好地区分枚举类型,可以使用完整的前缀:

    1. type PullRequestStatus int
    2. const (
    3. PULL_REQUEST_STATUS_CONFLICT PullRequestStatus = iota
    4. PULL_REQUEST_STATUS_CHECKING
    5. PULL_REQUEST_STATUS_MERGEABLE
    6. )

变量

  • 变量命名基本上遵循相应的英文表达或简写。
  • 在相对简单的环境(对象数量少、针对性强)中,可以将一些名称由完整单词简写为单个字母,例如:
    • user 可以简写为 u
    • userID 可以简写 uid
  • 若变量类型为 bool 类型,则名称应以 Has, Is, CanAllow 开头:

    1. var isExist bool
    2. var hasConflict bool
    3. var canManage bool
    4. var allowGitHook bool
  • 上条规则也适用于结构定义:

    1. // Webhook represents a web hook object.
    2. type Webhook struct {
    3. ID int64 `xorm:"pk autoincr"`
    4. RepoID int64
    5. OrgID int64
    6. URL string `xorm:"url TEXT"`
    7. ContentType HookContentType
    8. Secret string `xorm:"TEXT"`
    9. Events string `xorm:"TEXT"`
    10. *HookEvent `xorm:"-"`
    11. IsSSL bool `xorm:"is_ssl"`
    12. IsActive bool
    13. HookTaskType HookTaskType
    14. Meta string `xorm:"TEXT"` // store hook-specific attributes
    15. LastStatus HookStatus // Last delivery status
    16. Created time.Time `xorm:"CREATED"`
    17. Updated time.Time `xorm:"UPDATED"`
    18. }

变量命名惯例

变量名称一般遵循驼峰法,但遇到特有名词时,需要遵循以下规则:

  • 如果变量为私有,且特有名词为首个单词,则使用小写,如 apiClient
  • 其它情况都应当使用该名词原有的写法,如 APIClientrepoIDUserID

下面列举了一些常见的特有名词:

  1. // A GonicMapper that contains a list of common initialisms taken from golang/lint
  2. var LintGonicMapper = GonicMapper{
  3. "API": true,
  4. "ASCII": true,
  5. "CPU": true,
  6. "CSS": true,
  7. "DNS": true,
  8. "EOF": true,
  9. "GUID": true,
  10. "HTML": true,
  11. "HTTP": true,
  12. "HTTPS": true,
  13. "ID": true,
  14. "IP": true,
  15. "JSON": true,
  16. "LHS": true,
  17. "QPS": true,
  18. "RAM": true,
  19. "RHS": true,
  20. "RPC": true,
  21. "SLA": true,
  22. "SMTP": true,
  23. "SSH": true,
  24. "TLS": true,
  25. "TTL": true,
  26. "UI": true,
  27. "UID": true,
  28. "UUID": true,
  29. "URI": true,
  30. "URL": true,
  31. "UTF8": true,
  32. "VM": true,
  33. "XML": true,
  34. "XSRF": true,
  35. "XSS": true,
  36. }