logo
0
0
WeChat Login
feat: 发布 v0.1.7 版本并更新测试用例

Go 可视化编译助手

Version License Go VSCode

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

Go Build Extension

安装快速开始功能特性文档贡献


✨ 核心特性

🎯 可视化配置界面

通过直观的 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.gocmd.goapp.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 市场安装

  1. 打开 VSCode
  2. Ctrl+Shift+X(macOS: Cmd+Shift+X)打开扩展面板
  3. 搜索 "Go 可视化编译助手"
  4. 点击安装

从 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 管理

操作命令用途
✨ initgo mod init初始化模块
🧹 tidygo mod tidy整理依赖
📥 downloadgo mod download下载依赖
✓ verifygo mod verify验证依赖完整性
📦 vendorgo mod vendor创建 vendor 目录

测试工具

工具功能
🧪 test运行所有测试
📋 test -v详细测试输出
⚡ bench基准测试
📊 coverage代码覆盖率
🌐 cover htmlHTML 覆盖率报告

开发工具

工具功能
✨ 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(零框架依赖)

🤝 贡献

欢迎贡献代码、报告问题、提出建议!

贡献流程

  1. Fork 本仓库
  2. 创建功能分支:git checkout -b feature/xxx
  3. 提交更改:git commit -m "feat: xxx"
  4. 推送分支:git push origin feature/xxx
  5. 提交 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!