go-bindata 静态资源打包进执行文件
最后更新于:2022-04-02 02:41:19
[TOC]
## 概述
- 将 任意 文件转成 go 源码。它还可以帮你把数据 压缩一下 。常用于将数据嵌入程序.
这些资源文件变成源码之后,数据储存在字节切片中 (raw byte slice),只需要导入生成的源码,调用几个简单的函数就可访问,反正比 文件 IO 来得**简单和快**。因为是源码,也会加入编译,最后**包含在可执行文件中**,发布时也就不再需要带着资源文件
## 实例
### hello world
``` > go mod init demo // 第一步:生成 bin-data > go-bindata -o=bindata/bindata.go -ignore="\\.DS_Store|desktop.ini|README.md" -pkg=bindata assets/... > go build main.go > main // hello word hello word ``` ### 使用Makefile
``` > go mod init demo > make build > main.exe // hello word hello word ``` ### 考虑配置文件 如果涉及到配置文件,则最好允许用户修改配置,则需要把关于配置相关的静态文件重新以文件形式存在, 并可通过参数的形式显示生成 只需要第二个实例的 main.go 修改
```
> go mod init demo
> make build
> main.exe install
//会生成配置文件
```
';
assets/a.txt
``` hello word hello word ```main.go
``` package main import ( "demo/bindata" "fmt" ) func main() { // bindata 为 -pkg 指定的包名 file, err :=bindata.Asset("test/asd") if err != nil { fmt.Printf("%+v\n", err) } fmt.Printf("%+v\n", string(file)) } `````` > go mod init demo // 第一步:生成 bin-data > go-bindata -o=bindata/bindata.go -ignore="\\.DS_Store|desktop.ini|README.md" -pkg=bindata assets/... > go build main.go > main // hello word hello word ``` ### 使用Makefile
assets/a.txt
``` hello word hello word ```main.go
``` package main import ( "demo/bindata" "fmt" ) func main() { file, err :=bindata.Asset("assets/a.txt") if err != nil { fmt.Printf("%+v\n", err) } fmt.Printf("%+v\n", string(file)) } ```Makefile
``` # 设置输出文件目录 BINDATA_PATH = bindata # 设置输出的 go 文件名 BINDATA_NAME = bindata # 设置 pkg 的报名 BINDATA_PACKAGE = bindata # 静态资源路径 BINDATA_DIR = assets # ignore list 还是建议定义一个宏,方便随时添加 BINDATA_IGNORE = "\\.DS_Store|desktop.ini|README.md" .PHONY: bindata build all: build build: bindata go build -o main.exe bindata: go-bindata -o=$(BINDATA_PATH)/$(BINDATA_NAME).go -ignore=$(BINDATA_IGNORE) -pkg=$(BINDATA_PACKAGE) $(BINDATA_DIR)/... `````` > go mod init demo > make build > main.exe // hello word hello word ``` ### 考虑配置文件 如果涉及到配置文件,则最好允许用户修改配置,则需要把关于配置相关的静态文件重新以文件形式存在, 并可通过参数的形式显示生成 只需要第二个实例的 main.go 修改