支持Unmarshal map 转配置

最后更新于:2022-04-02 02:39:42

[TOC] ## 概述 支持的数据类型: * int,int8,int16,int32,int64 * uint,uint8,uint16,uint32,uint64 * string * bool * float32,float64 * map * time.Duration * 嵌套struct * map:key只支持string,value支持以上除struct的基本类型 ## 实例 ``` type Port struct { Port int `val:"8080"` Enabled bool `val:"true"` } type ServerProperties struct { _prefix string `prefix:"http.server"` //设置前缀,在 Set 时候使用前缀,若只有 struct 可不是设置此行 Port Port Timeout int `val:"1"` //默认值 Enabled bool Foo int `val:"1"` Time time.Duration `val:"1s"` Float float32 `val:"0.000001"` Params map[string]string Times map[string]time.Duration } func main() { p := kvs.NewMapProperties() // 方式一: 通过 set 设置,优先级高 p.Set("http.server.port.enabled", "false") p.Set("http.server.params.k1", "v1") p.Set("http.server.params.k2", "v2") p.Set("http.server.Times.m1", "1s") p.Set("http.server.Times.m2", "1h") p.Set("http.server.Times.m3", "1us") p.Set("http.server.enabled", "true") p.Set("http.server.time", "10s") p.Set("http.server.float", "23.45") p.Set("http.server.foo", "23") // 方式二: 通过 map struct 传值 ,会被 Set 方法覆盖 s := &ServerProperties{ Foo: 1234, Float: 1234.5, Port: Port{ Port: 9090, }, } p.Unmarshal(s) fmt.Println(s.Port.Port) fmt.Println(s.Foo) //23 Set 为 23 struct 为 1234 , } ```
';