• go-bindata + hcl 集成


    go-bindata 可以方便的将静态资源潜入到golang 应用中,hcl 是一个很不错的配置语言,以下是一个简单的集成,比较适合
    配置基本不需要变动的

    环境说明

    一个简单的基于hcl 的job 配置定义,然后通过go-bindata 将配置合并,然后代码引用

    • job hcl 定义
     
    // Job job
    type Job struct {
        Type string     `hcl:",label"`
        SQLs []*SQLType `hcl:"sqls,block"`
    }
    // SQLType SqlType
    type SQLType struct {
        Name    string `hcl:",label"`
        SQLType string `hcl:"sqltype"`
        SQL     string `hcl:"sql"`
    }
    • 参考hcl 内容
    job db  {
         sqls database1{
            sqltype = "slowquery1"
            sql = <<SQL
                select * from users
            SQL
         }
         sqls database2{
            sqltype = "slowquery2"
            sql = <<SQL
                select * from users
            SQL
         }
    }
    job http  {
         sqls database3{
            sqltype = "slowquery3"
            sql = <<SQL
                select * from users
            SQL
         }
         sqls database4{
            sqltype = "slowquery4"
            sql = <<SQL
                select * from users
            SQL
         }
    }
    • go-bindat 集成静态配置
    go-bindata -pkg conf jobsconf
    • 代码引用
      因为生成的代码中已经提供了方便的文件操作,我们只需要简单的替换就可以解决了,以前基于文件的操作改动很少
     
    package main
    import (
        "encoding/json"
        "log"
        "gihub.com/rongfengliang/hclv2-learning/cmd/v10/conf"
        "github.com/hashicorp/hcl/v2/hclsimple"
    )
    // Job job
    type Job struct {
        Type string     `hcl:",label"`
        SQLs []*SQLType `hcl:"sqls,block"`
    }
    // SQLType SqlType
    type SQLType struct {
        Name    string `hcl:",label"`
        SQLType string `hcl:"sqltype"`
        SQL     string `hcl:"sql"`
    }
    func main() {
        var myjobs map[string][]*Job = make(map[string][]*Job)
        //  conf 为生成的golang 代码
        files, err := conf.AssetDir("jobsconf")
        if err != nil {
            log.Println("#err :" + err.Error())
        } else {
            for _, file := range files {
                log.Println("file name:" + file)
                var config struct {
                    Jobs []*Job `hcl:"job,block"`
                }
                jobconfs, _ := conf.Asset("jobsconf/" + file)
                err = hclsimple.Decode(file, jobconfs, nil, &config)
                if err != nil {
                    log.Println("#err :" + err.Error())
                }
                myjobs[file] = config.Jobs
            }
        }
        if err != nil {
            log.Println("some err: " + err.Error())
        }
        for _, item := range myjobs {
            for _, job := range item {
                v, _ := json.Marshal(&job)
                log.Printf("message: %s 
    ", string(v))
            }
        }
    }
     

    说明

    以上是一个简单的集成,我们基于hcl 以及go-bindata可以方便的进行软件配置以及二进制包的分发,类似的工具还是很多的

    参考资料

    https://github.com/go-bindata/go-bindata
    https://github.com/hashicorp/hcl/tree/hcl2
    https://github.com/rongfengliang/hclv2-learning

  • 相关阅读:
    HDU 4778 内存搜索&amp;如压力
    cocos2dx-2.x CCFileUtils文件管理分析(2)
    开源 自由 java CMS
    1.网络工具:ifconfig,ping,netstate,Redhat命令和图形化设置ip,finger,nslookup
    什么是PV,UV。
    Python爬虫框架Scrapy获得定向打击批量招聘信息
    采用ToolRunner执行Hadoop基本面分析程序
    编辑时snapping的添加
    利用ArcGIS Engine、VS .NET和Windows控件开发GIS应用
    由图层判断数据源类型
  • 原文地址:https://www.cnblogs.com/rongfengliang/p/13269040.html
Copyright © 2020-2023  润新知