Go 可视化编译助手

专业的 Go 语言可视化编译配置工具,支持交叉编译、竞态检测、Build Tags、Module 管理、自定义 Ldflags、预设配置等高级功能。

安装 • 快速开始 • 功能特性 • 文档 • 贡献
✨ 核心特性
🎯 可视化配置界面
通过直观的 WebView 界面配置所有编译选项,无需记忆复杂的命令行参数。
- ⚡ 4 种快速预设 - 开发/生产/调试/自定义模式一键切换
- 💻 11 种操作系统 - Windows、Linux、macOS、FreeBSD、Android、WASM 等
- 🏗️ 11 种目标架构 - x86、ARM、MIPS、RISC-V、PowerPC、S390X 等
- 📦 Module 管理 - init/tidy/download/verify/vendor 一键操作
- 🧪 测试工具集成 - test/bench/coverage HTML 报告
- 🔧 开发工具 - fmt/imports/vet/lint/generate/install/clean/env
- 🏷️ Build Tags - 条件编译支持
- 🔗 Ldflags 快速插入 - 版本/时间/CommitID/分支/Go 版本/用户名
🎯 智能编译命名系统 (v0.1.7)
自动识别项目结构,生成准确的二进制文件名:
- Monorepo 支持 - 自动识别多二进制项目,避免命名冲突
- 子目录有 go.mod: 使用模块名 (
demo-linux-amd64)
- 共享根 go.mod: 组合命名 (
myproject-client-linux-amd64)
- 无 go.mod: 使用目录名 (
client-linux-amd64)
- 任意文件名 - 支持
server.go、cmd.go、app.go 等任意 Go 文件
- 智能版本处理 - 自动去除
/v2、/v3 等版本后缀
- ISO 8601 时间 - 标准时间格式 (
2025-11-12T12:42:28Z)
🚀 强大的交叉编译
支持 多种平台组合:
# 一键打包多平台
📦 Linux (amd64, arm64)
📦 Windows (amd64)
📦 macOS (amd64, arm64)
📦 FreeBSD, OpenBSD, NetBSD
📦 Android, WASM
📦 MIPS, RISC-V, PowerPC, S390X
🛡️ 安全终端集成
- 欢迎命令 - 首次打开项目自动执行(后台运行)
- 终端初始化 - 每次打开新终端自动执行
- 危险命令检测 - 38 种恶意模式自动阻止
⚙️ 智能配置管理
- 自动保存 - 配置自动保存到工作区
- 智能冲突处理 - 自动处理选项依赖关系
- 实时预览 - 命令实时显示
- 独立配置 - 不同项目独立配置
ZCli 预设开关:
{
"goBuild.zcli.enabled": true
}
📦 安装
从 VSCode 市场安装
- 打开 VSCode
- 按
Ctrl+Shift+X(macOS: Cmd+Shift+X)打开扩展面板
- 搜索 "Go 可视化编译助手"
- 点击安装
从 VSIX 安装
# 下载 .vsix 文件
# 在 VSCode 中执行
code --install-extension vscode-build-gui-go-0.1.7.vsix
前置要求
- VSCode: >= 1.60.0
- Go: >= 1.16(推荐 1.23+)
- 可选工具:
goimports - 自动管理导入
golangci-lint - 代码质量检查
🚀 快速开始
1. 打开编译面板
方式一: 点击编辑器标题栏的 ⚙️ 图标(在 .go 文件中)
方式二: Ctrl+Shift+P → 输入 "打开 Go 编译面板"
方式三: 右键 .go 文件 → "显示编译选项"
2. 选择预设配置
⚡ 快速预设
┌─────────┬─────────┬─────────┬─────────┐
│ 🛠️ 开发 │ 🚀 生产 │ 🐛 调试 │ ⚙️ 自定义 │
└─────────┴─────────┴─────────┴─────────┘
- 🛠️ 开发 - 快速编译,保留调试信息
- 🚀 生产 - 最大优化,最小体积
- 🐛 调试 - 竞态检测,详细输出
- ⚙️ 自定义 - 手动配置所有选项
3. 配置目标平台
💻 目标系统: Linux, Windows, macOS, Android, WASM...
🏗️ 目标架构: AMD64, ARM64, MIPS, RISC-V, S390X...
4. 开始编译
点击 "🔨 开始编译" 按钮或 "📦 一键打包项目"(多平台)
🎯 功能特性
编译选项
| 选项 |
说明 |
| 🏃 竞态检测 |
启用 -race 标志检测数据竞态(自动启用 CGO) |
| 🚀 优化编译 |
启用编译器优化 |
| 🗜️ 压缩体积 |
使用 -ldflags "-s -w" 移除符号表 |
| 🔗 CGO |
启用 CGO 支持(竞态检测时自动启用) |
| 🔨 强制重建 |
使用 -a 强制重新编译所有包 |
| ✂️ 移除路径 |
使用 -trimpath 移除文件系统路径 |
| 👁️ 仅预览 |
显示命令但不执行(学习模式) |
| 📋 详细输出 |
显示详细编译信息 |
Module 管理
| 操作 |
命令 |
用途 |
| ✨ init |
go mod init |
初始化模块 |
| 🧹 tidy |
go mod tidy |
整理依赖 |
| 📥 download |
go mod download |
下载依赖 |
| ✓ verify |
go mod verify |
验证依赖完整性 |
| 📦 vendor |
go mod vendor |
创建 vendor 目录 |
测试工具
| 工具 |
功能 |
| 🧪 test |
运行所有测试 |
| 📋 test -v |
详细测试输出 |
| ⚡ bench |
基准测试 |
| 📊 coverage |
代码覆盖率 |
| 🌐 cover html |
HTML 覆盖率报告 |
开发工具
| 工具 |
功能 |
| ✨ fmt |
格式化代码 |
| 📦 imports |
管理导入 |
| 🔍 vet |
静态检查 |
| 🚨 lint |
代码质量检查 |
| 🔨 generate |
代码生成 |
| 📥 install |
安装到 $GOBIN |
| 🧹 clean |
清理编译产物 |
| 🗑️ clean cache |
清理所有缓存 |
| 🌐 env |
查看环境变量 |
Ldflags 模板占位符
// 在代码中定义变量
package main
var (
Version string
BuildTime string
GitCommitID string
GitBranch string
GoVersion string
BuildUser string
)
使用安全的模板占位符(v0.1.7+):
| 按钮 |
模板占位符 |
运行时替换为 |
| 📌 版本 |
-X main.Version={{.Version}} |
Git tag 或 commit ID |
| ⏰ 时间 |
-X main.BuildTime={{.BuildTime}} |
ISO 8601 时间戳 |
| 🔖 CommitID |
-X main.GitCommitID={{.GitCommit}} |
Git commit 短哈希 |
| 🌿 分支 |
-X main.GitBranch={{.GitBranch}} |
当前 Git 分支名 |
| 🐹 Go 版本 |
-X main.GoVersion={{.GoVersion}} |
Go 版本(如 go1.23.4) |
| 👤 编译者 |
-X main.BuildUser={{.User}} |
当前用户名 |
| ✨ 全部 |
一键插入所有常用标志 |
- |
安全特性:
- ✅ 使用预定义占位符,不执行任意 shell 命令
- ✅ 编译时自动替换为实际值
- ✅ 跨平台兼容(Windows/Linux/macOS)
- ✅ 无安全风险
🛡️ 终端集成
欢迎命令(首次执行)
设置环境变量:
# Bash/Zsh
export GOBUILD_WELCOME_CMD="go version"
# Fish
set -x GOBUILD_WELCOME_CMD "go version"
# PowerShell
$env:GOBUILD_WELCOME_CMD = "go version"
行为:
- 仅在首次打开项目时执行一次
- 在后台创建独立终端
- 不会自动打开终端面板(在列表中可见)
重置: Ctrl+Shift+P → "重置欢迎命令执行状态"
终端初始化(每次执行)
# 每次打开新终端都执行
export GOBUILD_TERMINAL_INIT="export GOPROXY=https://goproxy.cn,direct"
配置选项(v0.1.7+):
{
"goBuild.terminalInit.enabled": true,
"goBuild.terminalInit.delay": 500,
"goBuild.terminalInit.excludeTaskTerminals": true,
"goBuild.terminalInit.showNotification": false,
"goBuild.terminalInit.reuseBehavior": "smart",
"goBuild.terminalInit.probeTimeoutMs": 500,
"goBuild.terminalInit.command": "",
"goBuild.welcomeCmd.command": ""
}
复用策略说明:
| 策略 |
行为 |
smart |
探测终端占用状态后决定是否注入(默认,推荐) |
always |
每次打开终端都注入,不探测 |
never |
若已有同名终端则跳过,避免重复注入 |
安全机制
扩展内置 38 种危险命令检测,自动阻止:
- ❌ 文件系统破坏(
rm -rf /)
- ❌ 系统关键操作(
shutdown, reboot)
- ❌ 恶意下载执行(
curl | sh)
- ❌ 反向 Shell(
nc -e)
- ❌ 敏感文件访问(
/etc/shadow)
📖 文档
完整的文档体系:
| 文档 |
描述 |
适用人群 |
| 用户手册 |
详细的使用指南、功能说明、常见问题 |
Go 开发者、用户 |
| 开发者文档 |
开发环境搭建、API 参考、扩展指南 |
贡献者、开发者 |
| 架构文档 |
系统架构、设计原则、技术选型 |
架构师、技术决策者 |
| 变更日志 |
版本历史、新增功能、Bug 修复 |
所有用户 |
🔧 配置
VSCode 配置
{
// 基础配置
"goBuild.outputDir": "./bin",
"goBuild.showNotifications": true,
"goBuild.defaultPreset": "dev",
// 欢迎命令
"goBuild.welcomeCmd.enabled": true,
"goBuild.welcomeCmd.command": "",
// 终端初始化
"goBuild.terminalInit.enabled": true,
"goBuild.terminalInit.delay": 500,
"goBuild.terminalInit.excludeTaskTerminals": true,
"goBuild.terminalInit.reuseBehavior": "smart",
"goBuild.terminalInit.probeTimeoutMs": 500,
"goBuild.terminalInit.command": ""
}
环境变量
# 欢迎命令
export GOBUILD_WELCOME_CMD="your-command"
# 终端初始化
export GOBUILD_TERMINAL_INIT="your-init-script"
🆕 v0.1.7 新特性
体验改进
- ✅ 任务状态统一 - 编译/打包/测试/工具命令统一状态提示与按钮锁定
- ✅ 编译命名优化 - 更准确的多入口与子模块命名规则
- ✅ 打包命名一致 - 一键打包产物命名与编译命名保持一致
安全性改进
- ✅ 输入净化 - 模块/参数输入统一转义,降低注入风险
- ✅ Ldflags 模板化 - 使用安全的
{{.placeholder}} 语法替代 shell 命令执行
代码质量
- ✅ 命名逻辑收敛 - 编译产物命名集中到公共工具函数
- ✅ 单元测试补齐 - 增加命名、打包一致性与无 Go 文件场景覆盖
📊 架构特点
模块化设计(v0.1.7)
vscode-build-gui-go/
├── src/
│ ├── extension.ts # 主入口
│ ├── common/ # 公共模块
│ │ ├── constants.ts # 常量定义
│ │ ├── types.ts # 类型定义
│ │ └── utils.ts # 工具函数
│ ├── features/ # 功能模块
│ │ ├── build/ # 编译功能(10个文件)
│ │ │ ├── buildProvider.ts
│ │ │ ├── buildCommands.ts
│ │ │ ├── buildConfig.ts
│ │ │ ├── buildActions.ts
│ │ │ ├── ldflags.ts # Ldflags 模板解析 (NEW)
│ │ │ ├── webview/
│ │ │ │ └── index.ts # WebView HTML (重构)
│ │ │ ├── router/
│ │ │ │ └── messageHandler.ts # 消息路由 (NEW)
│ │ │ └── service/
│ │ │ ├── compileService.ts # 编译服务 (NEW)
│ │ │ └── packageService.ts # 打包服务 (NEW)
│ │ ├── terminal/ # 终端功能(2个文件)
│ │ │ ├── terminalInit.ts # 改进去重逻辑
│ │ │ └── welcomeCommand.ts
│ │ ├── security/ # 安全功能
│ │ │ └── commandValidator.ts
│ │ └── tools/ # 工具功能(3个文件)
│ └── ...
├── tests/ # 单元测试
│ ├── compileService.test.ts
│ ├── buildNaming.test.ts
│ └── packageService.test.ts
└── docs/ # 文档目录
重构亮点:
- ✅ 职责分离 - 提取服务层,业务逻辑独立
- ✅ 安全增强 - Ldflags 模板化,移除 shell 注入风险
- ✅ 可测试性 - 新增单元测试覆盖
- ✅ 可维护性 - WebView HTML 模块化组织
技术栈
- 语言: TypeScript 4.4.4
- 框架: VSCode Extension API 1.60+
- 打包: Webpack 5.102
- UI: 原生 JavaScript(零框架依赖)
🤝 贡献
欢迎贡献代码、报告问题、提出建议!
贡献流程
- Fork 本仓库
- 创建功能分支:
git checkout -b feature/xxx
- 提交更改:
git commit -m "feat: xxx"
- 推送分支:
git push origin feature/xxx
- 提交 Pull Request
开发指南
# 克隆仓库
git clone https://github.com/darkit/vscode-go-build.git
cd vscode-go-build
# 安装依赖
npm install
# 编译
npm run compile
# 监听模式
npm run watch
# 调试:按 F5 启动扩展开发主机
详见 开发者文档
代码规范
- 遵循 TypeScript strict 模式
- 函数添加 JSDoc 注释
- 提交信息遵循 Conventional Commits
- 所有代码经过 ESLint 检查
📝 常见问题
Q: 扩展没有自动激活?
A: 确保打开了 .go 文件,Go 已正确安装并在 PATH 中。
Q: 交叉编译失败?
A: 尝试设置 CGO_ENABLED=0,某些包依赖 CGO 无法交叉编译。
Q: 终端命令不执行?
A: 检查环境变量是否设置,查看输出面板 "Zishuo Terminal Init" 的日志。
Q: 如何查看详细错误?
A: 启用 "详细输出" 选项,查看输出面板 "Go Build"。
更多问题参见 用户手册 - 常见问题
📜 许可证
本项目采用 MIT License 开源。
🔗 相关链接
🙏 致谢
感谢所有贡献者和使用者的支持!
特别感谢:
- Go 团队提供优秀的工具链
- VSCode 团队提供强大的扩展 API
- 所有提供反馈和建议的用户
Made with ❤️ by ZiShuo
如果这个项目对你有帮助,请给一个 ⭐️ Star!