go 语言通过基于域名(如 github.com/user/repo)的层级化包路径实现全局唯一性、可导入性和可分发性,`mkdir -p $gopath/src/github.com/user` 创建嵌套目录结构完全符合设计预期,并非错误。
在 Go 的模块化开发体系中,包路径(package path)不仅是文件系统路径,更是逻辑上的全局唯一标识符。当你执行:
mkdir -p $GOPATH/src/github.com/yourname/myproject
你实际是在构建一个符合 Go 约定的代码布局:
- github.com/yourname/myproject 是该包的完整导入路径(import path);
- 对应的磁盘路径为 $GOPATH/src/github.com/yourname/myproject;
- 其中 github.com 表示代码托管域(可替换为 gitlab.com、gitee.com 或自定义公司域名),yourname 是命名空间(避免与其他用户冲突),myproject 是具体项目名。
✅ 正确示例(项目结构):
$GOPATH/src/github.com/yourname/hello/ ├── hello.go └── go.mod # (推荐启用 Go Modules 后可脱离 GOPATH,但路径语义不变)
hello.go 内容: