Golang命名規範
image
檔案名稱
- 整個應用或包的主入口檔案應當是
main.go
或與應用程式名稱簡寫相同。例如:Gogs
的主入口檔案名稱為 gogs.go
。
函數或方法
若函數或方法為判斷類型(傳回值主要為 bool
類型),則名稱應以 Has
, Is
, Can
或 Allow
等判斷性動詞開頭:
func HasPrefix(name string, prefixes []string) bool { ... }func IsEntry(name string, entries []string) bool { ... }func CanManage(name string) bool { ... }func AllowGitHook() bool { ... }
常量
常量均需使用全部大寫字母組成,並使用底線分詞:
const APP_VER = "0.7.0.1110 Beta"
如果是枚舉類型的常量,需要先建立相應類型:
type Scheme stringconst ( HTTP Scheme = "http" HTTPS Scheme = "https")
如果模組的功能較為複雜、常量名稱容易混淆的情況下,為了更好地區分枚舉類型,可以使用完整的首碼:
type PullRequestStatus intconst ( PULL_REQUEST_STATUS_CONFLICT PullRequestStatus = iota PULL_REQUEST_STATUS_CHECKING PULL_REQUEST_STATUS_MERGEABLE)
變數
變數命名基本上遵循相應的英文表達或簡寫。
在相對簡單的環境(對象數量少、針對性強)中,可以將一些名稱由完整單詞簡寫為單個字母,例如:
user
可以簡寫為 u
userID
可以簡寫 uid
若變數類型為 bool
類型,則名稱應以 Has
, Is
, Can
或 Allow
開頭:
var isExist boolvar hasConflict boolvar canManage boolvar allowGitHook bool
上條規則也適用於結構定義:
// Webhook represents a web hook object.type Webhook struct { ID int64 `xorm:"pk autoincr"` RepoID int64 OrgID int64 URL string `xorm:"url TEXT"` ContentType HookContentType Secret string `xorm:"TEXT"` Events string `xorm:"TEXT"` *HookEvent `xorm:"-"` IsSSL bool `xorm:"is_ssl"` IsActive bool HookTaskType HookTaskType Meta string `xorm:"TEXT"` // store hook-specific attributes LastStatus HookStatus // Last delivery status Created time.Time `xorm:"CREATED"` Updated time.Time `xorm:"UPDATED"`}
變數命名慣例
變數名稱一般遵循駝峰法,但遇到特有名詞時,需要遵循以下規則:
- 如果變數為私人,且特有名詞為首個單詞,則使用小寫,如
apiClient
。
- 其它情況都應當使用該名詞原有的寫法,如
APIClient
、repoID
、UserID
。
下面列舉了一些常見的特有名詞:
// A GonicMapper that contains a list of common initialisms taken from golang/lintvar LintGonicMapper = GonicMapper{ "API": true, "ASCII": true, "CPU": true, "CSS": true, "DNS": true, "EOF": true, "GUID": true, "HTML": true, "HTTP": true, "HTTPS": true, "ID": true, "IP": true, "JSON": true, "LHS": true, "QPS": true, "RAM": true, "RHS": true, "RPC": true, "SLA": true, "SMTP": true, "SSH": true, "TLS": true, "TTL": true, "UI": true, "UID": true, "UUID": true, "URI": true, "URL": true, "UTF8": true, "VM": true, "XML": true, "XSRF": true, "XSS": true,}
image