★★★★☆

Go命名约定实用指南

来源: alexedwards.net日期: 2026-03-25评分: 4星
Go 编程规范 最佳实践 代码风格

核心摘要

选择正确的名称是Go编程的重要(有时困难!)部分。好名称使代码更清晰、更可预测、更易导航;坏名称则相反。Go有相当强的约定和一些硬规则。

标识符规则

硬规则

  • 可包含:Unicode字母、数字、下划线
  • 不能以数字开头
  • 不能使用Go关键字(如func, struct, if, for等)

命名风格

类型规则示例
非导出标识符camelCaseorderTotal
导出标识符PascalCaseFetchUser
避免snake_case, SCREAMING_SNAKE-

缩写词规则

  • 缩写词(API, URL, HTTP, ID)保持大小写一致
  • apiKeyAPIKey
  • ApiKey
  • ID作为"identity/identifier"缩写时用全大写:userID

避免冲突

  • 避免与内置类型冲突:int, bool, any
  • 避免与内置函数冲突:min, max, len, clear
  • 避免与标准库包名冲突:json, url, log, time等
  • 避免在标识符中包含类型名(除非需要区分转换后的变量)

导出与隐藏

  • 首字母大写 = 导出(对包外可见)
  • 首字母小写 = 非导出(仅包内可见)
  • 默认不导出,只在需要时导出
  • main包的标识符通常应全部非导出
  • 引用The Pragmatic Programmer:"写害羞的代码"

标识符长度

  • 作用域小(短函数、循环内):可用短名如i, p
  • 作用域大(跨函数使用):用描述性名称如count, sum
  • 原则:离声明越远,越需要描述性名称

包命名

规则示例
小写ASCII字母+数字orders, customer
短而好打slug, http
避免common, util, helpers, types
避免vendor, testdata, internal(特殊目录名)

文件命名

  • 理想:一个词、小写、总结文件内容
  • 两词可用routingindex.gorouting_index.go
  • 保持一致即可,个人偏好无下划线
  • 特殊后缀:_test.go, _linux.go, _darwin.go, _windows.go

避免冗余

导出函数时,避免重复包名。如orders.NewOrder()而非orders.NewOrders()

访问原文 →