内容简介:一个简单的go语言配置文件库,将YAML配置自动映射到实体中, 类似与spring-boot配置文件。 会从根实体strut遍历实体属性,如果类型为bool, string, 整型, 浮点型,map[string]interface{},[]interface{}, 则会根据tag中的定义实体
一个简单的 go 语言配置文件库,将YAML配置自动映射到实体中, 类似与spring-boot配置文件。
会从根实体strut遍历实体属性,如果类型为bool, string, 整型, 浮点型,map[string]interface{},[]interface{},
则会根据tag中的 profile
值(不设置则为当前属性名的首字母变小写)解析YAML或flag或环境变量,并赋值;
若YAML或flag或环境变量都不存在,则使用tag中的 profileDefault
设置默认值;
若默认值也未设置,则返回error。默认变量优先级啊:环境变量 > flag参数 > YAML > profileDefault默认值,
可以通过设置envHigher未false,让flag优先级 > 环境变量。
注意: 接收类型和返回类型都需要为指针类型
。
单profile下的使用:
eureka: instance: preferIpAddress: true leaseRenewalIntervalInSeconds: 10 leaseExpirationDurationInSeconds: 30 client: serviceUrl: defaultZone: http://localhost:8000/eureka/ registryFetchIntervalSeconds: 10 logging: level: github.com/flyleft/consul-iris/pkg/config: info github.com/flyleft/consul-iris/pkg/route: debug 复制代码
type SingleEnv struct { Eureka SingleEureka Logging map[string]interface{} `profile:"logging.level" profileDefault:"{\"github.com/flyleft/consul-iris\":\"debug\"}"` } type SingleEureka struct { PreferIpAddress bool `profile:"instance.preferIpAddress"` LeaseRenewalIntervalInSeconds int32 `profile:"instance.leaseRenewalIntervalInSeconds"` LeaseExpirationDurationInSeconds uint `profile:"instance.leaseExpirationDurationInSeconds"` ServerDefaultZone string `profile:"client.serviceUrl.defaultZone" profileDefault:"http://localhost:8000/eureka/"` RegistryFetchIntervalSeconds byte `profile:"client.registryFetchIntervalSeconds"` } //使用 func main() { env, err := Profile(&SingleEnv{}, "test-single-profile.yml", true) if err != nil { t.Error("Profile execute error", err) } trueEnv := env.(*SingleEnv) } //通过环境变量覆盖配置,比如设置EUREKA_INSTANCE_LEASERENEWALINTERVALINSECONDS环境变量值覆盖eureka.instance.leaseRenewalIntervalInSeconds 复制代码
多profile下的使用:
profiles: active: dev # 设置生效的profile dev: database: username: root password: root eureka: zone: http://localhost:8000/eureka/ fetchInterval: 10 logging: level: github.com/flyleft/consul-iris/pkg/config: info github.com/flyleft/consul-iris/pkg/route: debug production: database: username: production password: production eureka: zone: http://localhost:8000/eureka/ fetchInterval: 10 logging: level: github.com/flyleft/consul-iris/pkg/config: info github.com/flyleft/consul-iris/pkg/route: debug 复制代码
type Eureka struct { Zone string `profile:"zone"` FetchInterval int `profile:"fetchInterval"` } type DataSource struct { Host string `profile:"host" profileDefault:"localhost"` Username string `profile:"username"` Password string `profile:"password"` } type MultiEnv struct { DataSource DataSource `profile:"database"` Eureka Eureka Logging map[string]interface{} `profile:"logging.level" profileDefault:"{\"github.com/flyleft/consul-iris\":\"debug\"}"` Users []interface{} `profile:"users" profileDefault:"[\"admin\",\"test\",\"root\"]"` } func main() { env, err := Profile(&MultiEnv{}, "test-multi-profile.yml", true) if err != nil { t.Error("Profile execute error", err) } trueEnv := env.(*MultiEnv) } //可通过环境变量DEV_EUREKA_ZONE覆盖eureka.zone的值 复制代码
定义实体
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:- 类似Github的webhook实现
- 类似 Qt 的 GOSP 发布修复更新
- ASP实现类似hashMap功能的类
- 使用 Reactor 完成类似 Flink 的操作
- PHP实现类似题库抽题效果
- java实现golang类似的chan
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。