
使用 `go get github.com/myproject/demo/...` 可递归获取并安装仓库下所有子目录中的可执行程序(含 `main` 包)和库,实现“一次命令、双效安装”。
在 Go 模块时代(尤其是 Go 1.16+ 默认启用 module mode 后),go get 不再仅用于获取依赖,也承担了构建与安装二进制工具的职责。但默认情况下,go get github.com/myproject/demo 仅会下载并构建该路径下的主模块根目录(即 demo/ 下的 demo.go),而不会自动识别或安装其子目录中定义的 main 包(如 demo/cmd/ 或 demo/demo/ 中的可执行入口)。
真正有效的解决方案是使用 通配符 ...:
go get github.com/myproject/demo/...
该命令会递归遍历 github.com/myproject/demo/ 下所有子目录,对每个包含 main 函数的包(即 package main + func main())执行 go install,同时也会编译并缓存所有普通库包(非 main)供后续导入使用。
✅ 正确项目结构示例(推荐):
JTBC CMS(5.0) 是一款基于PHP和MySQL的内容管理系统原生全栈开发框架,开源协议为AGPLv3,没有任何附加条款。系统可以通过命令行一键安装,源码方面不基于任何第三方框架,不使用任何脚手架,仅依赖一些常见的第三方类库如图表组件等,您只需要了解最基本的前端知识就能很敏捷的进行二次开发,同时我们对于常见的前端功能做了Web Component方式的封装,即便是您仅了解HTML/CSS也
github.com/myproject/demo/
├── go.mod
├── demo.go # 库入口(package demo)
├── cmd/
│ └── demo/ # 推荐:将可执行文件集中放在 cmd/
│ └── main.go # package main, func main()
└── internal/ # 私有库(可选)
└── config/config.go此时运行 go get github.com/myproject/demo/... 将自动安装 cmd/demo 为 $GOPATH/bin/demo(或 Go 1.18+ 的 go install 默认路径),同时使 demo 库可被其他项目 import "github.com/myproject/demo"。
⚠️ 注意事项:
- ... 是 shell 层面的通配符,在 Windows PowerShell 中需加引号避免提前解析:go get "github.com/myproject/demo/...";
- 确保每个 main 包目录下有且仅有一个 .go 文件含 func main(),否则构建失败;
- Go 1.18 起 go get 已逐步弱化安装功能,更推荐显式使用 go install(如 go install github.com/myproject/demo/cmd/demo@latest),但 ... 语法在 go get 中仍完全有效;
- 若项目已启用 Go Modules,务必确保根目录存在 go.mod,否则 ... 可能误匹配本地文件系统路径。
总结:无需重构包名或拆分仓库,只需一条带 ... 的命令,即可兼顾库的可用性与工具的可安装性——这是 Go 生态中符合惯例、简洁可靠的实践方式。









