支持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 ,
}
```
';