{"id":36974792,"url":"https://github.com/uselibrary/gocar","last_synced_at":"2026-03-03T13:02:59.586Z","repository":{"id":328757764,"uuid":"1116591761","full_name":"uselibrary/gocar","owner":"uselibrary","description":"gocar, a cargo tool for Go","archived":false,"fork":false,"pushed_at":"2025-12-23T08:34:22.000Z","size":172,"stargazers_count":64,"open_issues_count":0,"forks_count":2,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-01-13T19:41:16.118Z","etag":null,"topics":["cargo","go","gocar"],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/uselibrary.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-12-15T05:21:53.000Z","updated_at":"2026-01-10T08:51:54.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/uselibrary/gocar","commit_stats":null,"previous_names":["uselibrary/gocar"],"tags_count":6,"template":false,"template_full_name":null,"purl":"pkg:github/uselibrary/gocar","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/uselibrary%2Fgocar","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/uselibrary%2Fgocar/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/uselibrary%2Fgocar/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/uselibrary%2Fgocar/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/uselibrary","download_url":"https://codeload.github.com/uselibrary/gocar/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/uselibrary%2Fgocar/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28403750,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-13T21:51:37.118Z","status":"ssl_error","status_checked_at":"2026-01-13T21:45:14.585Z","response_time":56,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["cargo","go","gocar"],"created_at":"2026-01-13T22:02:13.290Z","updated_at":"2026-01-13T22:02:13.355Z","avatar_url":"https://github.com/uselibrary.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# gocar, a cargo for Go\n\n\u003e 一个\"类 Rust Cargo\"的 Go 项目脚手架与命令行工具，提供简洁的项目初始化和构建体验。\n\n[![License: MIT](https://img.shields.io/badge/License-MIT-brightgreen.svg)](https://opensource.org/licenses/MIT)\n[![Go](https://img.shields.io/badge/go-1.25+-yellow.svg)](https://golang.org)\n[![Platform](https://img.shields.io/badge/platform-Linux%20|%20macOS%20|%20Windows-blue.svg)](https://github.com/uselibrary/gocar)\n\n**[简体中文](README.md)** | **[English](README_en.md)**\n\n## 安装\n\n\u003e `git` 是某些命令的前置依赖，请确保已安装。\n\n### 二进制安装（推荐）\n从 [release页面](https://github.com/uselibrary/gocar/releases) 下载适合你操作系统的预编译二进制文件，解压后将其移动到`$PATH`目录中：\n```bash\n/usr/local/bin/ # Unix-like 系统, 例如 Linux 或 macOS\nC:\\Program Files\\ # Windows 系统，可能需要设置环境变量\n```\n对于Unix-like系统，确保二进制文件具有可执行权限（需要root权限）：\n```bash\nchown root:root /usr/local/bin/gocar\nchmod +x /usr/local/bin/gocar\n```\n\n### 或从源码构建：\n\n```bash\ngit clone https://github.com/uselibrary/gocar.git\ncd gocar\nCGO_ENABLED=0 go build -ldflags=\"-s -w\" -trimpath -o gocar main.go\nsudo mv gocar /usr/local/bin/\nsudo chown root:root /usr/local/bin/gocar\nsudo chmod +x /usr/local/bin/gocar\n```\n\n\n\n## 快速开始\n\n```bash\n# 创建新项目（简洁模式）\ngocar new myapp\n\n# 进入项目目录\ncd myapp\n\n# 构建项目\ngocar build\n\n# 运行项目\ngocar run\n\n# 清理构建产物\ngocar clean\n```\n\n\n\n## 命令详解\n\n### 新建项目\n\n**`gocar new \u003cappName\u003e [--mode simple|project]`**\n\n创建新的 Go 项目:\n- `gocar new \u003cappName\u003e` 创建简洁模式项目（默认）\n- `gocar new \u003cappName\u003e --mode project` 创建项目模式项目\n\n简洁模型的目录结构：\n```\n\u003cappName\u003e/\n├── go.mod\n├── main.go\n├── README.md\n├── bin/\n├── .gitignore\n└── .git/\n``` \n\n项目模式的目录结构：\n```\n\u003cappName\u003e/\n├── cmd/\n│   └── server/\n│       └── main.go\n├── internal/\n├── pkg/\n├── test/\n├── bin/\n├── go.mod\n├── README.md\n├── .gitignore\n└── .git/\n```\n\n\u003e 注意：创建的项目默认不包含 `.gocar.toml`，可通过 `gocar init` 手动生成。\n\n\u003e 简洁模型式适用于小型项目、脚本、CLI 工具等；项目模式适用于大型项目、Web 服务、微服务等，遵循 Go 标准项目布局。\n\n\u003e `\u003cappName\u003e`为项目名称，同时作为目录名和输出的可执行文件名；`--mode`为项目模式，可选 `simple`（默认）或 `project`\n\n\u003e 项目名规则：\n\u003e - 必须以字母开头\n\u003e - 只能包含字母、数字、下划线 `_` 或连字符 `-`\n\u003e - 不能使用保留名称：`test`、`main`、`init`、`internal`、`vendor`\n\n\n### 编译构建\n\n\n**`gocar build [--release] [--target \u003cos\u003e/\u003carch\u003e] [--with-cgo] [--help]`**\n\n构建可执行文件：\n- `gocar build` ` 构建 Debug 版本（默认）\n- `gocar build --release` 构建 Release 版本（启用CGO_ENABLED=0，ldflags=\"-s -w\" 和 trimpath）\n- `gocar build --target \u003cos\u003e/\u003carch\u003e` 交叉编译到指定平台\n- `gocar build --release --target \u003cos\u003e/\u003carch\u003e` 以 Release 模式交叉编译到指定平台\n- `gocar build --with-cgo` 强制启用 CGO（设置 CGO_ENABLED=1）\n- `gocar build --help` 显示帮助信息\n\n构建行为：\n\n| 模式 | 命令等价 |\n|------|----------|\n| debug（默认） | `go build -o bin/\u003cos\u003e/\u003carch\u003e/\u003cappName\u003e ./main.go` |\n| -- release | `CGO_ENABLED=0 go build -ldflags=\"-s -w\" -trimpath -o bin/\u003cos\u003e/\u003carch\u003e/\u003cappName\u003e ./main.go` |\n| -- target| `GOOS=\u003cos\u003e GOARCH=\u003carch\u003e go build -o bin/\u003cos\u003e/\u003carch\u003e/\u003cappName\u003e ./main.go` |\n| -- release -- target | `CGO_ENABLED=0 GOOS=\u003cos\u003e GOARCH=\u003carch\u003e go build -ldflags=\"-s -w\" -trimpath -o bin/\u003cos\u003e/\u003carch\u003e/\u003cappName\u003e ./main.go` |\n| -- with-cgo | `CGO_ENABLED=1 go build -o bin/\u003cos\u003e/\u003carch\u003e/\u003cappName\u003e ./main.go` |\n| -- release -- with-cgo | `CGO_ENABLED=1 go build -ldflags=\"-s -w\" -trimpath -o bin/\u003cos\u003e/\u003carch\u003e/\u003cappName\u003e ./main.go` |\n\n示例：\n```bash\n# Debug 构建（默认）\ngocar build\n\n# Release 构建（启用CGO_ENABLED=0，ldflags=\"-s -w\" 和 trimpath）\ngocar build --release\n\n# 交叉编译到指定系统和架构，例如 Linux AMD64\ngocar build --target linux/amd64\n\n# Release 模式交叉编译到 Windows AMD64（启用CGO_ENABLED=0，ldflags=\"-s -w\" 和 trimpath）\ngocar build --release --target windows/amd64\n\n# 强制启用 CGO 构建\ngocar build --with-cgo\n\n# Release 模式下启用 CGO 构建\ngocar build --release --with-cgo\n\n# 显示帮助信息\ngocar build --help\n```\n\n### 常用命令\n\n**`gocar run [args...]`**\n\n直接运行当前项目（使用 `go run`）。\n\n示例：\n```bash\n# 运行项目\ngocar run\n\n# 传递参数给应用\ngocar run --port 8080\n```\n\n**`gocar clean`**\n\n清理 `bin/` 目录中的构建产物。\n\n*示例：\n```bash\ngocar clean\n# Cleaned build artifacts for '\u003cappName\u003e'\n```\n\n**`gocar help`**\n\n显示帮助信息。\n\n**`gocar version`**\n\n显示版本信息。\n\n### 包操作\n\n**`gocar add \u003cpackage\u003e...`**\n\n添加、更新依赖：\n- `gocar add \u003cpackage\u003e` 添加指定依赖\n- `gocar update \u003cpackage\u003e` 更新指定依赖\n- `gocar update` 更新所有依赖并执行 `gocar tidy`\n- `gocar tidy` 整理 `go.mod` 和 `go.sum`\n- `gocar add` 等同于 `go get \u003cpackage\u003e...` 并更新 `go.mod` 和 `go.sum`\n\n依赖行为：\n| 命令 | 等价 |\n|------|----------|\n| gocar add \u003cpackage\u003e... | go get \u003cpackage\u003e... |\n| gocar update [package]... | go get -u [package]... |\n| gocar update  | go get -u ./... \u0026 go mod tidy |\n| gocar tidy | go mod tidy |\n\n\n示例：\n```bash\n# 添加指定依赖\ngocar add github.com/gin-gonic/gin\n\n# 更新所有依赖\ngocar update\n\n# 更新指定依赖\ngocar update github.com/gin-gonic/gin\n\n# 整理依赖\ngocar tidy\n# Successfully tidied go.mod\n```\n\n### 配置文件\n\n**`gocar init`**\n\n在当前项目中生成 `.gocar.toml` 配置文件。配置文件中的设置优先级高于 gocar 的自动检测。\n\n示例：\n```bash\n# 在已有项目中生成配置文件\ngocar init\n# Created .gocar.toml in /path/to/project\n```\n\n**配置文件结构：**\n\n```toml\n# gocar 项目配置文件\n\n# 项目配置\n[project]\n# 项目模式: \"simple\" (单文件) 或 \"project\" (标准目录结构)\n# 留空则自动检测\nmode = \"\"\n\n# 项目名称，留空则使用目录名\nname = \"\"\n\n# 项目版本号\n# version = \"1.0.0\"\n\n# 构建配置\n[build]\n# 构建入口路径 (相对于项目根目录)\n# simple 模式默认为 \".\", project 模式默认为 \"cmd/\u003cappName\u003e\"（即项目名）\nentry = \".\"\n\n# 输出目录\noutput = \"bin\"\n\n# 额外的 ldflags，会追加到 profile 的 ldflags 之后\n# 例如: \"-X main.version=1.0.0\"\nldflags = \"\"\n\n# 构建标签\n# tags = [\"jsoniter\", \"sonic\"]\n\n# 额外的环境变量\n# extra_env = [\"GOPROXY=https://goproxy.cn\"]\n\n# 运行配置\n[run]\n# 运行入口路径，留空则使用 build.entry\nentry = \"\"\n\n# 默认运行参数\n# args = [\"-config\", \"config.yaml\"]\n\n# Debug 构建配置\n# 使用: gocar build (默认)\n[profile.debug]\n# ldflags = \"\"              # Debug 默认无 ldflags\n# gcflags = \"all=-N -l\"     # 禁用优化，方便调试\n# trimpath = false          # 保留路径信息\n# cgo_enabled = true        # 跟随系统默认\n# race = false              # 竞态检测 (会显著降低性能)\n\n# Release 构建配置\n# 使用: gocar build --release\n[profile.release]\nldflags = \"-s -w\"           # 裁剪符号表和调试信息\n# gcflags = \"\"              # 编译器参数\ntrimpath = true             # 移除编译路径信息\ncgo_enabled = false         # 禁用 CGO 以生成静态二进制\n# race = false              # 竞态检测\n\n# 自定义命令\n# 格式: 命令名 = \"要执行的 shell 命令\"\n# 使用: gocar \u003c命令名\u003e\n# 命令会在项目根目录下执行\n[commands]\n# 代码检查\nvet = \"go vet ./...\"\n\n# 代码格式化\nfmt = \"go fmt ./...\"\n\n# 运行测试\ntest = \"go test -v ./...\"\n\n# lint = \"golangci-lint run\"\n# doc = \"godoc -http=:6060\"\n# proto = \"protoc --go_out=. --go-grpc_out=. ./proto/*.proto\"\n```\n\n**配置项说明：**\n\n| 配置项 | 说明 |\n|--------|------|\n| `[project].mode` | 指定项目模式 (`simple` 或 `project`)，留空则自动检测 |\n| `[project].name` | 自定义项目名称，留空则使用目录名 |\n| `[project].version` | **项目版本号**，构建时自动通过 `-X main.version=\u003cversion\u003e` 注入到程序中 |\n| `[build].entry` | **自定义构建入口路径**，如 `cmd/myapp` 替代默认的 `cmd/\u003cappName\u003e`（即项目名） |\n| `[build].ldflags` | 额外的 ldflags，会追加到 profile 的 ldflags 之后 |\n| `[build].tags` | 构建标签列表 |\n| `[build].extra_env` | 额外的环境变量 |\n| `[run].entry` | 运行入口路径，留空则使用 `build.entry` |\n| `[run].args` | 默认运行参数 |\n| `[profile.debug]` | Debug 构建模式的参数配置 |\n| `[profile.release]` | Release 构建模式的参数配置 |\n| `[commands]` | 自定义命令映射 |\n\n**Profile 配置项：**\n\n| 配置项 | 说明 | Debug 默认 | Release 默认 |\n|--------|------|-------------|---------------|\n| `ldflags` | 链接器参数 | `\"\"` | `\"-s -w\"` |\n| `gcflags` | 编译器参数 | `\"\"` | `\"\"` |\n| `trimpath` | 移除路径信息 | `false` | `true` |\n| `cgo_enabled` | 启用 CGO | `nil` (系统默认) | `false` |\n| `race` | 竞态检测 | `false` | `false` |\n\n### 自定义命令\n\n在 `.gocar.toml` 的 `[commands]` 部分定义命令后，可以直接执行：\n\n```bash\n# 代码检查\ngocar vet\n\n# 代码格式化\ngocar fmt\n\n# 运行测试\ngocar test\n\n# 传递额外参数\ngocar test -run TestXxx\n```\n\n命令输出会实时显示到终端。您可以自定义任意命令，例如：\n\n```toml\n[commands]\nlint = \"golangci-lint run\"\ndoc = \"godoc -http=:6060\"\nproto = \"protoc --go_out=. --go-grpc_out=. ./proto/*.proto\"\ndev = \"air\"  # 热重载\n```\n\n#### 覆盖内置命令\n\n自定义命令可以覆盖大部分内置命令，让您完全控制项目的构建和运行流程：\n\n| 命令类型 | 命令 | 可被覆盖 |\n|---------|------|----------|\n| 保护命令 | `new`, `init` | ❌ 不可覆盖 |\n| 项目命令 | `build`, `run`, `clean`, `add`, `update`, `tidy` | ✅ 可覆盖 |\n\n\u003e **保护命令**（`new`、`init`）不能被覆盖，因为 `new` 在项目创建前执行（此时还没有配置文件），`init` 用于生成配置文件本身。\n\n示例：覆盖内置的 `build` 和 `clean` 命令\n\n```toml\n[commands]\n# 使用 Makefile 构建\nbuild = \"make build\"\n\n# 自定义清理逻辑\nclean = \"make clean \u0026\u0026 rm -rf dist/\"\n\n# 使用 docker-compose 运行\nrun = \"docker-compose up\"\n```\n\n当执行 `gocar build` 时，如果配置文件中定义了 `build` 命令，将优先执行自定义命令而非内置构建逻辑。\n\n---\n\n新建项目的 `main.go` 模板内容如下：\n```go\npackage main\n\nimport (\n    \"fmt\"\n    \"time\"\n)\n\nfunc main() {\n    fmt.Println(\"Hello, gocar! A golang project scaffolding tool for \u003cappName\u003e.\")\n    fmt.Println(time.Now().Format(\"2006-01-02 15:04:05\"))\n}\n```\n\n---\n\n## License\n\nMIT License\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fuselibrary%2Fgocar","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fuselibrary%2Fgocar","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fuselibrary%2Fgocar/lists"}