当前位置: 首页 > 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 truegolang代码 type ConfigTest struct {HttpAddr string json:http_addr toml:http_addr yaml:http_addrGrpcAddr string json:grpc_addr toml:grpc_addr yaml:grpc_addrJaegerUrl string json:jaeger_url toml:jaeger_url yaml:jaeger_url mapstructure:jaeger_urlTracing bool toml:tracing json:tracing yaml:tracing // opentelemetry tracing }// jaeger 加载配置文件 func TestSourceFile_Unmarshal(t *testing.T) {filePath : ./test_toml.tomlviper.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.0410800,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根据文类型件自动解码到结构 读取文件后缀比如 toml根据后缀设置 tagName调用 viper.Unmarshal解析 func TestSourceFile_Unmarshal1(t *testing.T) {filePath : ./test_toml.tomlc : 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.5530800,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.hkea.cn/news/14364133/

相关文章:

  • 刹车片图纸网站建设wordpress汉化
  • 加强单位网站建设谷歌官网下载
  • 网站案例英文wordpress 聊天插件
  • 做一个网站需要多少时间网新科技做网站怎么样
  • 重庆网站建设公司 十年上海seo推广公司
  • freenom怎么做网站家庭宽带做网站服务器吗
  • 沈阳做网站制作的公司物流企业网站
  • 塑胶制品塘厦东莞网站建设设计电子商务网站主页
  • 学校网站框架扁平化设计 科技感网站素材
  • 中国设计师网站衡阳企业网站排名优化
  • php网站开发环境搭建过年做哪个网站致富
  • 网站开发需要哪些人才有没有专做烘焙的网站
  • 做网站的是哪类公司重庆网上商城网站建设
  • 网站切片 做程序建筑工程项目简介
  • 怎么看网站关键词密度wordpress站点推荐
  • 用jsp做网站怎么分区教你如何建立网站
  • 苏州网站设计公司兴田德润i简介dede无法更新网站主页到
  • 怎么注册一个网站简述建设一个网站的基本步骤
  • 怎么制作移动端网站wordpress修复缩略图
  • 网站设计论文经济可行性分析会展设计
  • 海南百度网站建设wordpress调用页面列表
  • 桂林网站建设凡森网络网络架构部
  • 海南省城乡建设部网站首页二手网站排名
  • 网站顶部导航文件代码在吗免费网站建设可信吗
  • 土木建筑网站广州番禺钟村
  • 网站模板拍卖厦门网站建设哪家强
  • 给别人做网站做什么科目徐州网页设计培训
  • 免费商城网站建站系统陕西企业网站建设哪家专业
  • 同城网站免费个人建站系统
  • 湖南seo网站策划怎样免费建公司网站