• golang 一些不错的环境变量管理包


    joho/godotenv

    ruby dotenv 库golang 的移植,功能还是比较强大的,同时支持编码加载变量

    • 参考使用
    package main
    import (
        "github.com/joho/godotenv"
        "log"
        "os"
    )
    func main() {
      err := godotenv.Load()
      if err != nil {
        log.Fatal("Error loading .env file")
      }
      s3Bucket := os.Getenv("S3_BUCKET")
      secretKey := os.Getenv("SECRET_KEY")
      // now do something with s3 or whatever
    }

    a8m/envsubst

    支持环境变量的替换

    • 参考使用
    package main
    import (
      "fmt"
      "github.com/a8m/envsubst"
    )
    func main() {
        input := "welcom $HOME"
        str, err := envsubst.String(input)
        // ...
        buf, err := envsubst.Bytes([]byte(input))
        // ...
        buf, err := envsubst.ReadFile("filename")
    }

    Netflix/go-env

    支持基于tag 的环境变量处理

    • 参考使用
    package main
    import (
      "log"
      "time"
      env "github.com/Netflix/go-env"
    )
    type Environment struct {
      Home string `env:"HOME"`
      Jenkins struct {
        BuildId     *string `env:"BUILD_ID"`
        BuildNumber int     `env:"BUILD_NUMBER"`
        Ci          bool    `env:"CI"`
      }
      Node struct {
        ConfigCache *string `env:"npm_config_cache,NPM_CONFIG_CACHE"`
      }
      Extras env.EnvSet
      Duration      time.Duration `env:"TYPE_DURATION"`
      DefaultValue  string        `env:"MISSING_VAR,default=default_value"`
      RequiredValue string        `env:"IM_REQUIRED,required=true"`
    }
    func main() {
      var environment Environment
      es, err := env.UnmarshalFromEnviron(&environment)
      if err != nil {
        log.Fatal(err)
      }
      // Remaining environment variables.
      environment.Extras = es
      // ...
      es, err = env.Marshal(environment)
      if err != nil {
        log.Fatal(err)
      }
      home := "/tmp/edgarl"
      cs := env.ChangeSet{
        "HOME":         &home,
        "BUILD_ID":     nil,
        "BUILD_NUMBER": nil,
      }
      es.Apply(cs)
      environment = Environment{}
      err = env.Unmarshal(es, &environment)
      if err != nil {
        log.Fatal(err)
      }
      environment.Extras = es
    }

    drone/envsubst

    drone 团队出的,很不错

    sethvargo/go-envconfig

    同时也是基于tag的env 处理

    • 参考代码
    type MyConfig struct {
      Port     int    `env:"PORT"`
      Username string `env:"USERNAME"`
    }
    export PORT=5555
    export USERNAME=yoyo
    package main
    import (
      "context"
      "log"
      "github.com/sethvargo/go-envconfig"
    )
    func main() {
      ctx := context.Background()
      var c MyConfig
      if err := envconfig.Process(ctx, &c); err != nil {
        log.Fatal(err)
      }
      // c.Port = 5555
      // c.Username = "yoyo"
    }

    joeshaw/envdecode

    同样也是基于tag 的env 处理

    • 参考代码
    type Config struct {
        Hostname  string `env:"SERVER_HOSTNAME,default=localhost"`
        Port      uint16 `env:"SERVER_PORT,default=8080"`
        AWS struct {
            ID        string   `env:"AWS_ACCESS_KEY_ID"`
            Secret    string   `env:"AWS_SECRET_ACCESS_KEY,required"`
            SnsTopics []string `env:"AWS_SNS_TOPICS"`
        }
        Timeout time.Duration `env:"TIMEOUT,default=1m,strict"`
    }

    gobuffalo/envy

    包含了更多的env set 以及加载文件处理,有好多新特性

    参考资料

    https://github.com/joho/godotenv
    https://github.com/a8m/envsubst
    https://github.com/Netflix/go-env
    https://github.com/drone/envsubst
    https://godoc.org/github.com/drone/envsubst
    https://github.com/sethvargo/go-envconfig
    https://github.com/joeshaw/envdecode
    https://github.com/gobuffalo/envy

  • 相关阅读:
    AOJ 718.计算GPA
    AOJ 11.Rails
    AOJ 592.神奇的叶子
    AOJ 10.目标柏林
    洛谷P1030求先序排列
    vijos1514天才的记忆
    洛谷2016战略游戏
    LOJ10155数字转换
    洛谷2014选课
    洛谷2015二叉苹果树
  • 原文地址:https://www.cnblogs.com/rongfengliang/p/13832593.html
Copyright © 2020-2023  润新知