gocar:一个Golang的cargo
经常在Go和Rust之间切换,很喜欢Rust的Cargo带来的优秀项目初始化和构建体验:
cargo new <appName> # 一键创建标准项目
cargo build # 统一构建流程但回到Go时,虽然go mod很好,但项目初始化、结构规范、构建优化这些事,总是要手动操作。
于是,通过将Cargo的部分理念带到Go生态中。通过倒反天罡,写了gocar:简化Go项目“创建-构建”流程的命令行工具。它不替代go命令,而是作为补充,提供更一致、更便捷的起点。
项目已开源:https://github.com/uselibrary/gocar
以下是当前的示例,欢迎PR/issue:
快速开始
# 创建新项目(简洁模式)
gocar new myapp
# 进入项目目录
cd myapp
# 构建项目
gocar build
# 运行项目
gocar run
# 清理构建产物
gocar clean命令
gocar new <name> [--mode simple|project]
创建新的 Go 项目。
参数:
<name>- 项目名称,同时作为目录名和输出的可执行文件名--mode- 项目模式,可选simple(默认)或project
项目名规则:
- 必须以字母开头
- 只能包含字母、数字、下划线
_或连字符- - 不能使用保留名称:
test、main、init、internal、vendor
示例:
# 创建简洁模式项目(默认)
gocar new myapp
# 创建项目模式项目
gocar new myserver --mode projectgocar build [--release]
构建当前项目。
参数:
--release可选,使用之后即以CGO=0模式构建并优化体积
构建行为:
| 模式 | 命令等价 |
|---|---|
| Debug(默认) | go build -o bin/<appName> ./main.go |
| Release | CGO_ENABLED=0 go build -ldflags="-s -w" -trimpath -o bin/<appName> ./main.go |
项目模式下入口为 ./cmd/server/main.go示例:
# Debug 构建
gocar build
# Release 构建(CGO=0模式构建并优化体积)
gocar build --releasegocar run [args...]
直接运行当前项目(使用 go run)。
示例:
# 运行项目
gocar run
# 传递参数给应用
gocar run --port 8080gocar clean
清理 bin/ 目录中的构建产物。
示例:
gocar clean
# Cleaned build artifacts for 'myapp'gocar help
显示帮助信息。
gocar version
显示版本信息。
项目模式
简洁模式(Simple)
适用于小型项目、脚本、CLI 工具等。
myapp/
├── go.mod
├── main.go
├── README.md
├── bin/
├── .gitignore
└── .git/main.go 模板:
package main
import (
"fmt"
"time"
)
func main() {
fmt.Println("Hello, gocar! A golang package manager.")
fmt.Println(time.Now().Format("2006-01-02 15:04:05"))
}项目模式(Project)
适用于大型项目、Web 服务、微服务等,遵循 Go 标准项目布局。
myapp/
├── cmd/
│ └── server/
│ └── main.go # 应用入口
├── internal/ # 私有代码(不可被外部导入)
├── pkg/ # 公共库代码
├── test/ # 集成测试
├── bin/ # 构建输出
├── go.mod
├── README.md
├── .gitignore
└── .git/cmd/server/main.go 模板:
package main
import (
"fmt"
"time"
)
func main() {
fmt.Println("Hello, gocar! A golang package manager.")
fmt.Println(time.Now().Format("2006-01-02 15:04:05"))
}目录说明:
cmd/- 应用程序入口internal/- 私有代码,仅本模块内部使用(Go 编译器强制)pkg/- 可被外部项目导入的公共库test/- 集成测试、端到端测试
特性
- 自动 Git 初始化 - 创建项目时自动执行
git init -b main并生成.gitignore,需要已经安装git - 项目名验证 - 确保项目名符合 Go 规范
- Release 优化 - 使用
-ldflags="-s -w" -trimpath减小二进制体积 - 跨平台支持 - AMD64及aarch64的Windows、Linux 和 macOS
- 清理命令 - 一键清理构建产物