当前位置: 首页 > news >正文

企业建站系统下载推广下载

企业建站系统下载,推广下载,木匠手做网站,河北网络公司网站建设文章博客地址:golang 使用 viper 加载配置 自动反序列化到结构 golang使用 viper 无需设置 mapstructure tag 根据配置文件后缀 自动返序列化到结构解决结构有下划线的字段解析不成功问题 viper 正常加载配置文件 golang viper 其中可以用来 查找、加载和反序列化JSON、TOML…

文章博客地址:golang 使用 viper 加载配置 自动反序列化到结构

  • golang使用 viper 无需设置 mapstructure tag 根据配置文件后缀 自动返序列化到结构
  • 解决结构有下划线的字段解析不成功问题

viper 正常加载配置文件

golang viper 其中可以用来 查找、加载和反序列化JSON、TOML、YAML、HCL、INI、envfile和格式的配置文件

配置文件 test_toml.toml

http_addr = ":8082"
grpc_addr = ":8083"
jaeger_url= "http://localhost:14268/api/traces"
tracing= true

golang代码

type ConfigTest struct {HttpAddr  string `json:"http_addr" toml:"http_addr" yaml:"http_addr"`GrpcAddr  string `json:"grpc_addr" toml:"grpc_addr" yaml:"grpc_addr"`JaegerUrl string `json:"jaeger_url" toml:"jaeger_url" yaml:"jaeger_url" mapstructure:"jaeger_url"`Tracing   bool   `toml:"tracing"  json:"tracing" yaml:"tracing" ` // opentelemetry tracing
}// jaeger 加载配置文件
func TestSourceFile_Unmarshal(t *testing.T) {filePath := "./test_toml.toml"viper.SetConfigFile(filePath)if err := viper.ReadInConfig(); err != nil {t.Error(err)}c := &ConfigTest{}if err := viper.Unmarshal(c); err != nil {t.Error(err)}logger.Infow("Unmarshal file sucess", "v", c)
}

打印返序列化的配置结构

{"level":"info","ts":"2023-08-27T21:35:27.041+0800","caller":"config/source_file_test.go:31","msg":"Unmarshal file sucess","v":{"http_addr":"","grpc_addr":"","jaeger_url":"http://localhost:14268/api/traces","tracing":true}}

可以看到带下划线的字段,不加 mapstructure 标签,是不会反序列化

不加 mapstructure tag实现自动反序列化

查看viper Unmarshal 代码

func (v *Viper) Unmarshal(rawVal interface{}, opts ...DecoderConfigOption) error {return decode(v.AllSettings(), defaultDecoderConfig(rawVal, opts...))
}
func decode(input interface{}, config *mapstructure.DecoderConfig) error {decoder, err := mapstructure.NewDecoder(config)if err != nil {return err}return decoder.Decode(input)
}
func NewDecoder(config *DecoderConfig) (*Decoder, error) {if config.TagName == "" {config.TagName = "mapstructure"}// ...
}
  • 从代码看出 Viper使用的是 github.com/mitchellh/mapstructure来解析值
  • mapstructure 用于将通用的map[string]interface{}解码到对应的 Go 结构体中
  • 默认情况下,mapstructure 使用结构体中字段的名称做这个映射,不区分大小写,比如 Name 字段可以映射到 name、NAME、NaMe 等等
  • 如果没有指定 tagName ,则默认为 mapstructure,这也是为什么带下划线的字段不加 mapstructure 标签无法解析的原因
  • viper 中Unmarshal的第二个是可以指定 DecoderConfigOption 的,从而可以指定 tagName

viper根据文类型件自动解码到结构

  1. 读取文件后缀比如 toml
  2. 根据后缀设置 tagName
  3. 调用 viper.Unmarshal解析
func TestSourceFile_Unmarshal1(t *testing.T) {filePath := "./test_toml.toml"c := &ConfigTest{}if err := viperUnmarshal(c, filePath); err != nil {t.Error(err)}logger.Infow("Unmarshal file sucess", "v", c)
}func viperUnmarshal(v interface{}, configPath string) error {var tagName stringext := filepath.Ext(configPath)if len(ext) > 1 {tagName = ext[1:]}// set decode tag_name, default is mapstructuredecoderConfigOption := func(c *mapstructure.DecoderConfig) {c.TagName = tagName}cViper := viper.New()cViper.SetConfigFile(configPath)if err := cViper.ReadInConfig(); err != nil {return err}return cViper.Unmarshal(v, decoderConfigOption)
}
{"level":"info","ts":"2023-08-27T21:35:34.553+0800","caller":"config/source_file_test.go:40","msg":"Unmarshal file sucess","v":{"http_addr":":8082","grpc_addr":":8083","jaeger_url":"http://localhost:14268/api/traces","tracing":true}}

我已将viper加载配置集成进自己的项目,完整example 代码可以查看 source_file_test.go

http://www.ho-use.cn/article/1701.html

相关文章:

  • 广西网站建设营销公司宁波seo在线优化
  • 如何美化网站成都疫情最新消息
  • 东莞网站建设公司辉煌大厦网络培训机构排名前十
  • 赣州网站建设公司开网站怎么开
  • 江苏住房和城乡建设厅网站报考搜狗搜索引擎推广
  • 做网站遵义推广联盟平台
  • 在哪些网站可以做企业名称预审中国搜索引擎大全
  • 基本网站建设技术网络视频营销策略有哪些
  • 网站源码下载 用户注册如何做电商新手入门
  • 网站如何设定关键词龙华百度快速排名
  • 做盗版视频网站犯法吗百度用户服务中心人工电话
  • 下载网站备案的核验单seo推广优化排名软件
  • 西安做网站公司必达seo实战培训学校
  • 怎样做省钱购物网站zac博客seo
  • 商务网站建设方案晚上偷偷看b站软件推荐
  • 推广引流的10大渠道湖南企业竞价优化公司
  • 网站开发和游戏开发哪个难国家高新技术企业查询
  • 江门网站建设价格英文外链代发
  • 给网站做导流汉中网站seo
  • 帮人做兼职的网站吗推广普通话
  • 一般的学校网站怎么做登录百度账号注册
  • 安康市城乡建设规划局 网站互联网平台公司有哪些
  • 建立门户网站深圳做seo有哪些公司
  • 昆明网站词排名优化广州seo关键词优化费用
  • 网站设计找谁做政府免费培训面点班
  • 网站模板制作教程武汉做网页推广公司
  • 怎样创造自己的网站网站收录是什么意思
  • 阿里云服务器做盗版视频网站济南新闻头条最新事件
  • 今日军事新闻俄乌战况最新消息最专业的seo公司
  • wordpress laravel 共存山西seo优化公司