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 \r\n", 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
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)
2019-07-08 使用nginx 正向代理暴露k8s service && pod ip 外部直接访问
2018-07-08 nomad 集群搭建
2017-07-08 秘密共享
2017-07-08 Let’s Encrypt 将于 2018 年免费提供通配符证书