首页 > 其他分享 >golang go-bindata打包配置文件嵌入到二进制文件

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

时间:2024-07-05 14:01:43浏览次数:18  
标签:文件 配置文件 golang bindata go x00 config

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

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

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

go-bindata

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

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

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

安装

    
    //安装
    go get -u github.com/jteeuwen/go-bindata/...

使用

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


    //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’)获取然后解析

    ...
    
    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 大全

标签:文件,配置文件,golang,bindata,go,x00,config
From: https://blog.csdn.net/nbplus_007/article/details/140128484

相关文章

  • golang 中 Jwt 的验证及续期使用
    创建Utils的Jwt文件,用于创建JwtToken 和  验证并继期packageutilsimport("errors""fmt""github.com/dgrijalva/jwt-go""strings""time")//生成JwtToken//@ParamsecretKey表示jwtsecretKey【***......
  • golang 内存逃逸 你应该知道的知识
    逃逸分析目录1.为什么要了解内存逃逸2.什么是逃逸分析3.内存逃逸的影响-性能和稳定性4.内存逃逸的原因5.内存逃逸的检测6.如何避免内存逃逸7.内存逃逸代码示例原文链接:一文弄懂Golang中的内存逃逸1.为什么要了解内存逃逸-内存逃逸是Go语言编程中一个特别需要注意的问......
  • 没有使用Redis相关的代码或依赖,但在 `application.yaml` 配置文件中配置了Redis参数,项
    个人名片......
  • 聊聊JAVA项目中架构以及配置文件
        今天我来聊一下以前项目中的架构和配置文件,之前发的一篇关于用原始的TOMCAT进行项目打包和启动的文章很多人都看了。也得到了不少点赞和评论,这也是算大家对我的认可。    今天呢,我们继续来聊聊以前Java项目当中的项目架构和配置文件。    首先是......
  • golang 打印类型和switch case选择
    因为需要打印传输信息,要用到pion的stats,而stats返回报告的又包含多个type,对于不同type有不同的数据统计,所以需要打印类型和switchcase针对于不同的type执行不同的命令。针对于返回变量类型,golang采用reflect包,对于变量valua,可以利用reflect.TypeOf(valua)返回变量类型,而这只能做......
  • Golang面试:泛型
    Go语言在1.18版本中引入了泛型(Generics),这是Go语言发展中的一个重要里程碑。泛型允许你编写更通用和可复用的代码,而无需牺牲类型安全性。以下是对Go中泛型的详细介绍,包括其语法、使用场景和示例代码。1.泛型的基本概念泛型允许你定义可以处理多种数据类型的函数和数据结构,而无需......
  • 读取.net core配置文件appsetting.json内容
    appsetting.json内容//省略部分代码...//代码生成相关"CodeCreatorInfo":{"xmlPath":"11111",//xml路径(绝对路径)"jsRootPaht":"2222",//js文件夹路径"Controllers":"333",//特殊Controller列表,逗号隔开......
  • Golang开发:构建支持并发的网络爬虫
    Golang开发:构建支持并发的网络爬虫随着互联网的快速发展,获取网络数据成为了许多应用场景中的关键需求。网络爬虫作为一种自动化获取网络数据的工具,也因此迅速崛起。而为了应对日益庞大的网络数据,开发支持并发的爬虫成为了必要的选择。本文将介绍如何使用Golang编写一个支持......
  • Golang 依赖注入设计哲学|12.6K 的依赖注入库 wire
    一、前言线上项目往往依赖非常多的具备特定能力的资源,如:DB、MQ、各种中间件,以及随着项目业务的复杂化,单一项目内,业务模块也逐渐增多,如何高效、整洁管理各种资源十分重要。本文从“术”层面,讲述“依赖注入”的实现,带你体会其对于整洁架构&DDD等设计思想的落地,起到的支撑作用。......
  • 【力扣 - 每日一题】3115. 质数的最大距离(一次遍历、头尾遍历、空间换时间、埃式筛、
    原题链接题目描述给你一个整数数组nums。返回两个(不一定不同的)质数在nums中下标的最大距离。示例1:输入:nums=[4,2,9,5,3]输出:3解释:nums[1]、nums[3]和nums[4]是质数。因此答案是|4-1|=3。示例2:输入:nums=[4,8,2,8]输出:0解释:nums[2]是质......