Go变量命名须以字母或下划线开头,禁用数字开头;首字母大小写控制导出性;禁用关键字及预定义标识符;强制驼峰命名,仅常量允下划线;缩写如ID、URL保持大写。

变量名必须以字母或下划线开头
Go 不允许用数字开头的变量名,比如 2ndUser 或 123id 直接报错。编译器会提示 illegal character U+0032 '2' 这类错误。实际开发中常见误写是把 API 字段名(如 user_id)直接照搬成 Go 变量名,结果用了下划线开头又带数字——_2024Config 看似合法,但下划线开头在包级作用域意味着“包私有”,若本意是导出就错了。
区分大小写 + 导出控制靠首字母
Go 用首字母大小写决定是否导出:大写(如 UserName)可被其他包访问,小写(如 userName)仅限当前包。这点容易被忽略——声明了 var Config map[string]string,本想只在本包用,结果因为首字母大写,外部包也能调用,破坏封装。反过来,如果定义了 var dbConn *sql.DB 却忘了首字母大写,其他文件里就根本拿不到这个连接实例。
- 包级变量优先用小写首字母,除非明确需要跨包使用
- 函数参数、局部变量一律小写开头,哪怕类型是结构体(
user := User{...}) - 避免混合风格,比如
UserID和user_id在同一文件里共存,会增加阅读负担
别用关键字和预定义标识符当变量名
像 func、type、range 这些 Go 关键字,编译器直接拒绝。但更隐蔽的坑是预定义标识符,比如 len、cap、print ——它们不是关键字,却在任何作用域都自动可见。如果写 var len int = 10,后续调用 len(slice) 就会报 len is not a function,因为变量名遮蔽了内置函数。类似情况还有 error、nil(虽然 nil 是预声明的零值,但作为变量名会导致语义混乱)。
驼峰命名是事实标准,别碰下划线分隔
Go 社区几乎不接受 user_name 或 max_connection_count 这类写法。标准库、主流框架(gin、gorm)、甚至 go fmt 工具本身都强制驼峰。用下划线不仅视觉割裂,还会让 IDE 自动补全失效(比如输入 user 后按 Tab,userName 能出来,user_name 很可能被过滤掉)。唯一例外是常量全大写加下划线(MAX_RETRY_COUNT),但变量不在此列。
真正难的是缩写取舍:该写 userID 还是 userId?官方推荐前者——ID 作为专有名词缩写保持大写,URL、HTTP 同理。写成 userid 或 urlString 都算偏离规范。
golang免费学习笔记(深入):立即使用
在学习笔记中,你将探索golang的核心概念和高级技巧!











