Go中变量作用域由首字母大小写决定:小写字母开头为包内可见,大写则导出供外部使用;这是语言强制规则,非约定,适用于所有标识符。
在 Go 语言中,变量的作用域由其标识符的首字母大小写决定:以小写字母开头的标识符(如 count、defaultConfig)是包内可见的(即包级私有),仅能在定义它的包内访问;而大写字母开头的(如 Count、DefaultConfig)才是导出的(public),可被其他包引用。
只需确保变量名以小写字母开头,并在包级别(函数外)声明即可。Go 不需要额外关键字(如 private 或 internal)来标记私有性,大小写即规则。
main.go 或任意 .go 文件顶部(函数外)用 var 声明:var cache = make(map[string]int)
var;var version = "1.2.0"
var timeoutSeconds int = 30
Go 的导出规则统一适用于变量、函数、结构体字段、方法等所有标识符。编译器和 go build 工具会自动识别首字母:小写 → 不导出 → 其他包无法 import 和访问;大写 → 导出 → 可被外部使用。这不是约定,而是语言强制机制。
任意文件中直接使用name string),即使结构体本身导出,该字段仍不可被外部包读写初学者容易混淆“包内可见”和“文件内可见”。Go 没有文件级作用域——只要在同一包(相同 package xxx 声明),无论多少个源文件,小写变量都是全局可见的。
redeclared in this block 错误)init() 函数,它在包加载时自动执行,且能访问所有包级小写变量_counter)模拟私有——只要首字母小写即私有,下划线无特殊含义假设包名为 utils:
var helperData = []string{"a", "b"} → 其他包无法访问 utils.helperData
var HelperData = []string{"a", "b"} → 其他包可通过 utils.HelperData 访问helperData 是切片或指针,其值可被包内任意函数修改,但外部完全不可见