帮酷LOGO
0 0 评论
  • 显示原文与译文双语对照的内容
文章标签:YAML  envi  golang  SUP  Shell  环境  tool  
Golang Configuration tool that support YAML, JSON, Shell Environment

  • 源代码名称:configor
  • 源代码网址:http://www.github.com/jinzhu/configor
  • configor源代码文档
  • configor源代码下载
  • Git URL:
    git://www.github.com/jinzhu/configor.git
  • Git Clone代码到本地:
    git clone http://www.github.com/jinzhu/configor
  • Subversion代码到本地:
    $ svn co --depth empty http://www.github.com/jinzhu/configor
    Checked out revision 1.
    $ cd repo
    $ svn up trunk
    
  • Configor

    支持 YAML,JSON,TOML,shell 环境的Golang配置工具

    wercker status

    用法

    package mainimport (
     "fmt""github.com/jinzhu/configor")varConfig = struct {
     APPNamestring`default:"app name"`DBstruct {
     Name string User string`default:"root"` Password string`required:"true" env:"DBPassword"` Port uint`default:"3306"` }
     Contacts []struct {
     Name string Email string`required:"true"` }
    }{}funcmain() {
     configor.Load(&Config, "config.yml")
     fmt.Printf("config: %#v", Config)
    }

    使用配置文件 config.yml:

    appname: testdb:
     name: testuser: testpassword: testport: 1234contacts:
    - name: i testemail: test@test.com

    调试模式&详细模式

    如果应用程序的debuging会让你知道加载配置,比如来自哪个文件,shell 环境,verbose mode 会告诉你,比如,那些 shell 环境 configor 会加载你的配置,那么调试/详细模式很有帮助。

    // Enable debug mode or set env `CONFIGOR_DEBUG_MODE` to true when running your applicationconfigor.New(&configor.Config{Debug: true}).Load(&Config, "config.json")// Enable verbose mode or set env `CONFIGOR_VERBOSE_MODE` to true when running your applicationconfigor.New(&configor.Config{Verbose: true}).Load(&Config, "config.json")
    高级用法
    • 加载多个配置
    // Earlier configurations have higher priorityconfigor.Load(&Config, "application.yml", "database.json")
    • 不匹配的键返回错误

    在配置文件中查找不包含配置结构中任何字段的配置文件中的错误。 如果 config.toml 包含不支持ConfigStruct结构中任何字段的键,则会返回一个错误。 如果未设置 ErrorOnUnmatchedKeys,则默认为 false。 注意,目前仅支持toml和yaml文件。 ErrorOnUnmatchedKeys文件将忽略。 当json库添加对这个 [ https://github.com/golang/go/issues/15314 ]的支持时,这可能会改变。

    err:= configor.New(&configor.Config{ErrorOnUnmatchedKeys: true}).Load(&ConfigStruct, "config.toml")
    • 按环境加载配置

    使用 CONFIGOR_ENV 设置环境,如果没有设置 CONFIGOR_ENV,环境将在默认情况下为 development,在运行 go test 时将是 test

    // config.goconfigor.Load(&Config, "config.json")
    $ go run config.go// Will load `config.json`, `config.development.json` if it exists// `config.development.json` will overwrite `config.json`'s configuration// You could use this to share same configuration across different environments$ CONFIGOR_ENV=production go run config.go// Will load `config.json`, `config.production.json` if it exists// `config.production.json` will overwrite `config.json`'s configuration$ go test// Will load `config.json`, `config.test.json` if it exists// `config.test.json` will overwrite `config.json`'s configuration$ CONFIGOR_ENV=production go test// Will load `config.json`, `config.production.json` if it exists// `config.production.json` will overwrite `config.json`'s configuration
    // Set environment by configconfigor.New(&configor.Config{Environment: "production"}).Load(&Config, "config.json")
    • 示例配置
    // config.goconfigor.Load(&Config, "config.yml")
    $ go run config.go// Will load `config.example.yml` automatically if `config.yml` not found and print warning message
    • 从 shell 环境加载
    $ CONFIGOR_APPNAME="hello world"CONFIGOR_DB_NAME="hello world"go run config.go// Load configuration from shell environment, it's name is {{prefix}}_FieldName
    // You could overwrite the prefix with environment CONFIGOR_ENV_PREFIX, for example:$ CONFIGOR_ENV_PREFIX="WEB"WEB_APPNAME="hello world"WEB_DB_NAME="hello world"go run config.go// Set prefix by configconfigor.New(&configor.Config{ENVPrefix: "WEB"}).Load(&Config, "config.json")
    • 匿名结构

    在匿名的嵌入结构中添加 anonymous:"true" 标记,以不在任何包含字段的环境变量中包含结构 NAME。 例如:

    typeDetailsstruct {
     Descriptionstring}typeConfigstruct {
     Details`anonymous:"true"`}

    使用 anonymous:"true" 标记,Description 字段的环境变量是 CONFIGOR_DESCRIPTION。 如果没有指定 anonymous:"true" 标记,那么环境变量将包含嵌入的结构 NAME,并且是 CONFIGOR_DETAILS_DESCRIPTION

    • 带标志
    funcmain() {
     config:= flag.String("file", "config.yml", "configuration file")
     flag.StringVar(&Config.APPName, "name", "", "app name")
     flag.StringVar(&Config.DB.Name, "db-name", "", "database name")
     flag.StringVar(&Config.DB.User, "db-user", "root", "database user")
     flag.Parse()
     os.Setenv("CONFIGOR_ENV_PREFIX", "-")
     configor.Load(&Config, *config)
     // configor.Load(&Config)//only load configurations from shell env & flag}

    你可以帮助使项目更好,查看 http://gorm.io/contribute.html 你可以做的事。

    作者

    jinzhu

    许可证

    在MIT许可证下发布



    文章标签:tool  SUP  envi  环境  Shell  golang  YAML  

    Copyright © 2011 HelpLib All rights reserved.    知识分享协议 京ICP备05059198号-3  |  如果智培  |  酷兔英语