golang go-bindata打包配置文件嵌入到二进制文件

go-bindata打包配置文件嵌入到二进制文件

项目中难免会用到一些静态资源和配置文件,但是常规打包的二进制文件无法再其他目录正常运行(静态资源和配置文件不存在)

有类似需求的可以安装使用:go-bindata进行编译处理配置文件

go-bindata

(go-bindata)包实现将项目静态配置文件嵌入到go文件,解决了打包时候因相对路径问题,导致的二进制文件不能再任何目录下运行

go-bindata原理:运行go-bindata会将指定目录下的静态文件或配置编译成二进制嵌入到bindata文件中,所以如果配置文件更新的话需要重新生成该文件;新增配置文件同样需要执行该命令

福利彩蛋:没有好玩的 API 接口?上百款免费接口等你来,免费 API,免费 API 大全

安装

golang 复制代码
    
    //安装
    go get -u github.com/jteeuwen/go-bindata/...

使用

按照以下命令完成将配置文件编译生成二进制嵌入到bindata.go文件,该文件可以放到任何一个目录下进行使用,获取配置的时候需要和生成bindata.go是的的目录保持一致

golang 复制代码
    //go-bindata ./config/ 默认生成bindata.go
    //使用:下面命令会在tool目录下生成bindata.go文件,包名tool
    go-bindata -pkg=tool -o=./tool/bindata.go ./config/
    
    
    //**注意:取值的时候需要和运行go-bindata的config目录一至(例:./config/ 取值 'config/*' 获取的文件)
    //获取配置文件:这里的目录结构必须
    tool.Asset('config/apps.json')

配置文件

复制代码
   //config/apps.json
    {
      "appName": "golangGinStudy",
      "appMode": "debug",
      "appHost": "localhost",
      "appPort": "8001"
    }

bindata.go文件

下面是配置文件被编译成二进制后嵌入go文件,和go文件的二进制存储方;配置信息可以通过Asset('config/apps.json')获取然后解析

golang 复制代码
    ...
    
    var _config_apps_json = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xaa\xe6\x52\x50\x50\x4a\x2c\x28\xf0\x4b\xcc\x4d\x55\xb2\x52\x50\x4a\xcf\xcf\x49\xcc\x4b\x77\xcf\xcc\x0b\x2e\x29\x4d\xa9\x54\xd2\x81\x4a\xfb\xe6\xa7\x80\xa5\x53\x52\x93\x4a\xd3\xe1\xa2\x1e\xf9\xc5\x25\x20\xd1\x9c\xfc\xe4\xc4\x9c\x0c\x10\x07\x26\x13\x90\x5f\x04\x96\xb1\x30\x30\x30\x54\xe2\xaa\x05\x04\x00\x00\xff\xff\x3b\x8c\x47\x70\x66\x00\x00\x00")
    
    func config_apps_json() ([]byte, error) {
        return bindata_read(
            _config_apps_json,
            "config/apps.json",
        )
    }
    
    func Asset(name string) ([]byte, error) {
        cannonicalName := strings.Replace(name, "\\", "/", -1)
        if f, ok := _bindata[cannonicalName]; ok {
            return f()
        }
        return nil, fmt.Errorf("Asset %s not found", name)
    }
    ...

福利彩蛋:没有好玩的 API 接口?上百款免费接口等你来,免费 API,免费 API 大全

相关推荐
小码哥_常几秒前
Spring Boot 搭建邮件发送系统:开启你的邮件自动化之旅
后端
故事和你9124 分钟前
洛谷-数据结构1-1-线性表1
开发语言·数据结构·c++·算法·leetcode·动态规划·图论
石榴树下的七彩鱼1 小时前
图片修复 API 接入实战:网站如何自动去除图片水印(Python / PHP / C# 示例)
图像处理·后端·python·c#·php·api·图片去水印
我叫黑大帅1 小时前
为什么TCP是三次握手?
后端·网络协议·面试
我叫黑大帅1 小时前
如何排查 MySQL 慢查询
后端·sql·面试
techdashen1 小时前
Rust项目公开征测:Cargo 构建目录新布局方案
开发语言·后端·rust
星空椰1 小时前
JavaScript 进阶基础:函数、作用域与常用技巧总结
开发语言·前端·javascript
消失的旧时光-19432 小时前
Spring Boot 实战(五):接口工程化升级(统一返回 + 异常处理 + 错误码体系 + 异常流转机制)
java·spring boot·后端·解耦
忒可君2 小时前
C# winform 自制分页功能
android·开发语言·c#
Rust研习社2 小时前
Rust 智能指针 Cell 与 RefCell 的内部可变性
开发语言·后端·rust