内容简介:创建一个 yaml 配置文件,config.yml编写代码:Usage:
介绍
一个支持 yaml、json、toml、 shell 的配置文件工具
安装
go get github.com/jinzhu/configor or gopm get -v github.com/jinzhu/configor
使用示例
创建一个 yaml 配置文件,config.yml
appname: test
db:
name: test
user: root
password: 123
port: 3306
contacts:
- name: jack
email: jack@test.com
- name: tom
email: tom@test.com
编写代码:
package main
import (
"fmt"
"github.com/jinzhu/configor"
)
type Config struct {
APPName string `default:"app name"`
DB struct{
Name string
User string `default:"root"`
Password string `required:"true" env:"DBPassword"`
Port uint `default:"3306"`
}
Contacts []struct{
Name string
Email string `required:"true"`
}
}
func main() {
var conf = Config{}
err := configor.Load(&conf, "config.yml")
if err != nil {
panic(err)
}
fmt.Printf("%v \n", conf)
}
测试模式
Usage:
// 上面的代码 下面这这句
err := configor.Load(&conf, "config.yml")
// 修改为
err := configor.New(&configor.Config{Debug: true}).Load(&conf, "config.yml")
# 使用环境变量开启测试模式,无需修改代码 CONFIGOR_DEBUG_MODE=true go run config.go
Output:
Current environment: 'development'
Loading configurations from file 'config.yml'...
Configuration:
&main.Config{APPName:"test", DB:struct { Name string; User string "default:\"root\""; Password string "required:\"true\" env:\"DBPassword\""; Port uint "default:\"3306\"" }{Name:"test", User:"root", Password:"123", Port:0xcea}, Contacts:[]struct { Name string; Email string "required:\"true\"" }{struct { Name string; Email string "required:\"true\"" }{Name:"jack", Email:"jack@test.com"}, struct { Name string; Email string "required:\"true\"" }{Name:"tom", Email:"tom@test.com"}}}
{test {test root 123 3306} [{jack jack@test.com} {tom tom@test.com}]}
详细模式
Usage:
// 上面的代码 下面这这句
err := configor.Load(&conf, "config.yml")
// 修改为
err := configor.New(&configor.Config{Verbose: true}).Load(&conf, "config.yml")
# 使用环境变量开启详细模式,无需修改代码 CONFIGOR_VERBOSE_MODE=true go run config.go
Output:
Current environment: 'development'
Loading configurations from file 'config.yml'...
Trying to load struct `Config`'s field `APPName` from env Configor_APPName, CONFIGOR_APPNAME
Trying to load struct `Config`'s field `DB` from env Configor_DB, CONFIGOR_DB
Trying to load struct ``'s field `Name` from env Configor_DB_Name, CONFIGOR_DB_NAME
Trying to load struct ``'s field `User` from env Configor_DB_User, CONFIGOR_DB_USER
Trying to load struct ``'s field `Password` from env DBPassword
Trying to load struct ``'s field `Port` from env Configor_DB_Port, CONFIGOR_DB_PORT
Trying to load struct `Config`'s field `Contacts` from env Configor_Contacts, CONFIGOR_CONTACTS
Trying to load struct ``'s field `Name` from env Configor_Contacts_0_Name, CONFIGOR_CONTACTS_0_NAME
Trying to load struct ``'s field `Email` from env Configor_Contacts_0_Email, CONFIGOR_CONTACTS_0_EMAIL
Trying to load struct ``'s field `Name` from env Configor_Contacts_1_Name, CONFIGOR_CONTACTS_1_NAME
Trying to load struct ``'s field `Email` from env Configor_Contacts_1_Email, CONFIGOR_CONTACTS_1_EMAIL
Configuration:
&main.Config{APPName:"test", DB:struct { Name string; User string "default:\"root\""; Password string "required:\"true\" env:\"DBPassword\""; Port uint "default:\"3306\"" }{Name:"test", User:"root", Password:"123", Port:0xcea}, Contacts:[]struct { Name string; Email string "required:\"true\"" }{struct { Name string; Email string "required:\"true\"" }{Name:"jack", Email:"jack@test.com"}, struct { Name string; Email string "required:\"true\"" }{Name:"tom", Email:"tom@test.com"}}}
{test {test root 123 3306} [{jack jack@test.com} {tom tom@test.com}]}
高级用法
加载多个配置文件
// application.yml 的优先级 大于 database.json, 排在前面的配置文件优先级大于排在后的的配置 configor.Load(&Config, "application.yml", "database.json")
根据环境变量加载配置文件
使用 CONFIGOR_ENV
设置环境变量,如果 CONFIGOR_ENV
没有设置,框架将会使用 development
作为默认环境变量。
// config.go configor.Load(&Config, "config.json") $ go run config.go // 将会加载 `config.json`,如果存在 `config.development.json` 将会自动加载 // `config.development.json` 将会覆盖 `config.json` 的配置 $ CONFIGOR_ENV=production go run config.go // 将会加载 `config.json`,如果存在 `config.production.json` 将会自动加载 // `config.production.json` 将会覆盖 `config.json` 的配置 $ go test // 将会加载 `config.json`,如果存在 `config.test.json` 将会自动加载 // `config.test.json` 将会覆盖 `config.json` 的配置 $ CONFIGOR_ENV=production go test // 将会加载 `config.json`,如果存在 `config.production.json` 将会自动加载 // `config.production.json` 将会覆盖 `config.json` 的配置
// 在代码里面设置 环境变量
configor.New(&configor.Config{Environment: "production"}).Load(&Config, "config.json")
示例配置
configor.Load(&Config, "config.yml") $ go run config.go # 将会自动加载 `config.example.yml` 如果 `config.yml` 不存在将会输出警告信息
Output:
Failed to find configuration config.yml, using example file config.example.yml
{test {dodododo root 123 3306 } [{jack jack@test.com} {tom tom@test.com}]}
从shell加载配置项
CONFIGOR_APPNAME="hello world" go run config.go
# 格式为 {{prefix}}_FieldName
# 覆盖 prefix shell 操作
$ CONFIGOR_ENV_PREFIX="WEB" WEB_APPNAME="hello, prefix" go run config.go
# 在代码的书写方式为
configor.New(&configor.Config{ENVPrefix: "WEB"}).Load(&Config, "config.json")
匿名结构 - Anonymous Struct
type Details Struct {
Description string
}
type Config struct {
Details `anonymous:"true"`
}
如果使用 anonymous:"true"
标签,那么 Description
参数的环境变量将会变为 CONFIGOR_DESCRIPTION
,否则环境变量将会是 CONFIGOR_DETAILS_DESCRIPTION
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Beginning ASP.NET 4 in C# and Vb
Imar Spaanjaars / Wrox / 2010-3-19 / GBP 29.99
This book is for anyone who wants to learn how to build rich and interactive web sites that run on the Microsoft platform. With the knowledge you gain from this book, you create a great foundation to ......一起来看看 《Beginning ASP.NET 4 in C# and Vb》 这本书的介绍吧!
JSON 在线解析
在线 JSON 格式化工具
图片转BASE64编码
在线图片转Base64编码工具