用途:为新建 Go 项目或服务搭建目录结构与模块骨架,避免照搬微服务模板或把大型服务塞进扁平目录。
主要能力:按项目规模选择布局——单二进制小工具用根目录 package main 扁平结构;供他人导入的库用根包加 internal/;单二进制服务用 cmd/<name>/main.go 加 internal/ 包;多二进制共享代码用多个 cmd/ 子目录加 internal/。模块命名使用可获取的仓库路径,如 go mod init github.com/acme/payment-service,最后一段与用户可见的导入名一致。服务布局示例含 cmd/payment-api/main.go、internal/domain、service、store、handler、config,以及 migrations、go.mod、Makefile、README.md。规则:默认用 internal/,仅在确有外部消费者且模块含私有代码时用 pkg/;依赖向内流动 handler → service → domain ← store,domain 不导入 store 与 handler。
使用方式:先决定是工具、库还是服务及二进制数量,执行 go mod init <repo-path>,只创建首个功能需要的目录,按薄 main 模式编写 main.go(main 只做解析、装配、调用 run、退出),添加 build、test、lint 的 Makefile 目标,最后用 go build ./... 与 go vet ./... 验证骨架。
限制与注意:不要预先创建空的 pkg/、api/、docs/、build/;不要建 src/、vendor/ 或 util、common、helpers、models 等杂物包;包名与目录名一致、小写、无下划线、不重复;os.Exit 只出现在 main,不用 init() 做装配。资料未提供具体版本要求、平台限制或收费信息。