Go 语言严格区分大小写
包括:
- 变量名、函数名、类型名  
name和Name是两个不同的变量。func Get()和func get()是两个不同的函数。
 - 包导入路径  (包名)
import "github.com/example/MyPkg"和import "github.com/example/mypkg"会被视为不同的包(即使文件系统不区分大小写)。
 - 结构体字段名  
- JSON/XML 反序列化时,字段名大小写必须匹配:
type User struct { Name string `json:"name"` // 必须和 JSON 的 key 完全一致 Age int `json:"age"` } 
 - JSON/XML 反序列化时,字段名大小写必须匹配:
 - 常量、枚举值  
const (A = 1; a = 2),A和a是不同的常量。
 
关键影响
1. 编译错误(最常见)
func main() {
    var name string
    fmt.Println(Name) // 报错:undefined: Name(正确应为 name)
}
2. 包导入失败
- 如果包名是 
mypkg,但代码中写import "Mypkg",会报错:cannot find package "Mypkg" in any of... 
3. JSON/数据库字段映射问题
type User struct {
    Username string `json:"username"`
}
data := `{"UserName": "Alice"}`  // 大小写不匹配,反序列化失败
var u User
json.Unmarshal([]byte(data), &u) // u.Username 仍是空值
特殊情况(不区分大小写)
文件名(取决于操作系统)
- Windows/macOS(默认不区分):
main.go和MAIN.GO是同一个文件。 - Linux(区分):
main.go和MAIN.GO是两个文件。 - 但 Go 工具链建议始终使用小写文件名(如 
main.go)。 
- Windows/macOS(默认不区分):
 环境变量(Go 不处理,由系统决定)
os.Getenv("PATH")和os.Getenv("path")在 Windows 返回相同值,但在 Linux 不同。
最佳实践
统一命名风格
- 变量/函数:驼峰式(如 
getUserInfo)。 - 常量:全大写(如 
MAX_SIZE)。 - 包名:全小写(如 
mypkg)。 
- 变量/函数:驼峰式(如 
 IDE 配置
- VS Code:开启 
gopls的严格大小写检查(默认已启用)。 
- VS Code:开启 
 跨平台注意
- 如果代码可能在 Linux/Windows 共享,避免仅靠大小写区分文件/目录。
 
测试你是否理解
以下代码能否编译?为什么?
package main
import "fmt"
func main() {
    var a int = 1
    fmt.Println(A)
}
答案:不能,因为 A 未定义(Go 区分 a 和 A)。
