1.?常量的基本命名規則
1.1.?命名格式
1. 使用const關鍵字聲明;
2. 命名格式:const 常量名 [類型] = 值;
3. 類型可以省略,由編譯器推斷;
1.2.?命名風格
大小寫規則:
1. 首字母大寫:導出常量,可被其他包訪問;
2. 首字母小寫:包內私有常量;
命名慣例:
1. 推薦使用駝峰命名法;
2. 全大寫+下劃線風格常用于特殊常量;
1.3. 有效命名示例
const MaxRetryCount = 3
const defaultTimeout = 30
const API_VERSION = "v1.0"
const (StatusOK = 200StatusNotFound = 404
)
1.4.?無效命名示例
const 3attempts = 3 // 錯誤:不能以數字開頭
const user-name = "tom" // 錯誤:不能包含連字符
const var = "value" // 錯誤:不能使用關鍵字
2.?常量組的命名規則
2.1.?基本語法
const (常量1 = 值1常量2 = 值2...
)
2.2.?分組規則
1. 相關常量應該分組聲明;
2. 每組常量應有明確的邏輯關聯;
3. 可以使用空白行分隔不同組的常量;
2.3.?示例
// HTTP狀態碼
const (StatusOK = 200StatusCreated = 201StatusBadRequest = 400
)// 數據庫配置
const (DBHost = "localhost"DBPort = 5432DBUser = "admin"DBPassword = "secret"
)
3.?iota的使用規范
3.1.?基本用法
const (Zero = iota // 0One // 1Two // 2
)
3.2.?高級用法規范
1.?顯式重置
const (A = iota // 0B // 1
)const ( // iota重置為0C = iota // 0D // 1
)
2.?表達式計算
const (KB = 1 << (10 * iota) // 1 << 0 = 1MB // 1 << 10 = 1024GB // 1 << 20 = 1048576
)
3.?跳過值
const (_ = iota // 跳過0Read // 1Write // 2Execute // 3
)
4.?多常量同值
const (A, B = iota, iota + 1 // A=0, B=1C, D // C=1, D=2
)
3.3.?最佳實踐
1. 為iota常量添加注釋說明;
2. 避免過度復雜的iota表達式;
3. 將相關iota常量分組聲明;
4. 考慮使用自定義類型增強可讀性;
4.?類型化常量的命名
4.1.?顯式類型聲明
const Pi float64 = 3.14159
const Prefix string = "usr_"
4.2.?類型推斷
const MaxSize = 1024 // 默認為int
const Greeting = "Hello" // 默認為string
4.3.?類型化常量組
const (X int = 1Y = 2.0 // 無類型浮點數Z = "3" // 無類型字符串
)
5.?特殊常量命名場景
5.1.?枚舉模擬
type Weekday intconst (Sunday Weekday = iotaMondayTuesdayWednesdayThursdayFridaySaturday
)
5.2.?位掩碼常量
const (FlagNone = 0FlagRead = 1 << iota // 1FlagWrite // 2FlagExec // 4
)
5.3.?配置常量
const (DefaultPort = 8080DefaultTimeout = 30 * time.SecondMaxConnections = 100
)
6.?命名注意事項
1. 避免魔數:使用有意義的常量名替代直接值;
// 不推薦
if timeout > 30 { ... }// 推薦
const DefaultTimeout = 30
if timeout > DefaultTimeout { ... }
2. 保持一致性:相同概念的常量使用統一命名風格;
3. 注釋說明:為復雜常量或特殊值添加注釋;
4. 作用域控制:合理使用大小寫控制常量可見性;
5. 避免沖突:注意與預定義標識符的命名沖突;
通過遵循這些命名規則和最佳實踐,可以使Go代碼中的常量更加清晰、可維護,并充分利用Go語言常量的特性。