前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >go-jarvis 容器化 go 应用开发配置管理利器

go-jarvis 容器化 go 应用开发配置管理利器

作者头像
老麦
发布2022-12-24 09:47:58
2520
发布2022-12-24 09:47:58
举报
文章被收录于专栏:Go与云原生Go与云原生

为了方便 golang 容器化开发的时候管理配置。

核心功能

  1. 根据 config 结构体生成 yaml 配置文件
  2. 程序启动时, 从 yaml 配置文件和 环境变量 中对 config 赋值

执行逻辑

  1. 根据配置 config{} 生成对应的 default.yml 配置文件。
  2. 读取依次配置文件 default.yml,config.yml + 分支配置文件.yml + 环境变量
    • 根据 GitlabCI, 分支配置文件 config.xxxx.yml
    • 如没有 CI, 读取本地文件: local.yml

使用需求

  1. config 对象中的结构体中, 使用 env:"" tag 才能的字段才会被解析到 default.yml 中。也只有这些字段才能通过 配置文件环境变量 进行初始化赋值。
  2. config 中的对象需要有 SetDefaults()Init() 方法。
    • SetDefaults 方法用于结构体设置默认值
    • Init 方法用于根据默认值初始化

demo 案例

初始化代码如下

代码语言:javascript
复制
package main

import (
    "fmt"

    "github.com/gin-gonic/gin"
    "github.com/go-jarvis/jarvis"
)

type Server struct {
    Listen string `env:"addr"`
    Port   int    `env:"port"`

    engine *gin.Engine
}

func (s *Server) SetDefaults() {
    if s.Port == 0 {
        s.Port = 80
    }
}

func (s *Server) Init() {
    s.SetDefaults()

    if s.engine == nil {
        s.engine = gin.Default()
    }
}

func (s Server) Run() error {
    addr := fmt.Sprintf("%s:%d", s.Listen, s.Port)

    return s.engine.Run(addr)
}

func main() {
    server := &Server{}

    app := jarvis.App{
        Name: "Demo",
    }

    config := &struct {
        Server *Server
    }{
        Server: server,
    }
    // app.Save(config)

    app.Conf(config)
    // fmt.Println(config.Server.Port)

    server.Run()

}

生成的 yaml 配置文件

生成配置文件如下

代码语言:javascript
复制
Demo__Server_addr: ""
Demo__Server_port: 80

在启动过程中, 如果环境变量中有同名变量, (例如 Demo__Server_port), 该变量值将被读取, 并复制给对应的字段。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-09-17,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 熊猫云原生Go 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 核心功能
    • 执行逻辑
      • 使用需求
      • demo 案例
        • 生成的 yaml 配置文件
        相关产品与服务
        容器服务
        腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档