概述
2goarray 是一个轻量级命令行工具,可将任意文件(如图像、文本、二进制文件等)转换为符合 Go 语法规范的字节数组([]byte)。生成的代码可直接嵌入 Go 程序中,适用于需要将静态资源(如图标、HTML/CSS 文件、配置文件等)内联到应用中的场景,尤其在跨平台 GUI 框架(如 Wails)或 CLI 工具开发中提供便捷的资源管理。
功能特性
- 通用文件支持:处理任意文件类型,包括 PNG、JPEG、文本、二进制等。
- 类型安全输出:生成标准的
[]byte数组代码,兼容 Go 编译检查。 - 灵活变量命名:允许自定义生成的字节数组变量名。
- 零依赖跨平台:单一可执行文件,支持 Windows、Linux、macOS。
- 无缝集成构建流程:支持
go generate自动化生成代码。
安装
前提条件
- Go 1.16+ 环境(需配置
GOPATH/bin到系统 PATH)。
安装命令
go install github.com/cratonica/2goarray@latest
使用方法
基本语法
2goarray [变量名] [包名] < [输入文件路径] > [输出.go文件]
参数说明
- 变量名:生成的字节数组变量名(必填)。
- 包名:Go 文件的所属包名(默认
main)。 - 输入通过
<重定向文件内容。 - 输出通过
>写入目标 Go 文件。
示例
将 logo.png 转换为字节数组并保存到 assets/logo.go:
2goarray LogoData main < logo.png > assets/logo.go
生成文件内容示例:
package main
var LogoData = []byte{
0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d,
// ...(更多字节数据)...
}
工作原理
- 读取文件:通过标准输入读取文件原始二进制数据。
- 编码转换:将二进制流转换为 Go 的十六进制字节数组格式。
- 代码生成:根据用户指定的变量名和包名生成有效 Go 文件。
性能建议
- 大文件处理:虽然支持任意文件,但建议仅内联必要的小型资源(如图标、CSS),避免增大编译体积。
- 动态加载替代方案:超过 1MB 的文件建议使用
embed包或外部文件加载。
常见用例
| 场景 | 文件类型 | 用途 |
|---|---|---|
| Wails 应用窗口图标 | PNG/ICO | 设置跨平台应用图标 |
| 内嵌配置文件 | JSON/YAML | 避免外部文件依赖 |
| CLI 工具嵌入模板 | HTML/Text | 生成静态输出内容 |
| 游戏资源打包 | 音频/3D 模型 | 减少运行时文件加载操作 |
通过此工具,开发者可将各类静态资源高效嵌入 Go 程序,增强应用的自包含性和可移植性。