Viper反序列化解析字段不成功问题

问题背景

通过viper解析文件内容映射config一直失败,相关代码如下

type Config struct {DBConf    *DBConf    `toml:"db"`RedisConf *RedisConf `toml:"redis"`WebConfig *WebConfig `toml:"app"`
}type DBConf struct {Read struct {Dsn string `toml:"dsn"` // 最高优先级} `toml:"read"`Write struct {Dsn string `toml:"dsn"` // 最高优先级} `toml:"write"`Base struct {Type            string        `toml:"type"`MaxOpenConn     int           `toml:"maxOpenConn"`MaxIdleConn     int           `toml:"maxIdleConn"`ConnMaxLifeTime time.Duration `toml:"connMaxLifeTime"`} `toml:"base"`
}type CacheType stringtype RedisConf struct {Address  string `toml:"addr"`DB       string `toml:"db"`Password string `toml:"password"`
}type WebConfig struct {Port        string `toml:"port"`IsDebug     bool   `toml:"debug"`LogFilePath string `toml:"path"`
}appFullPath := "./conf/" + filePath// 解析 configviper.SetConfigName("web")viper.AddConfigPath(appFullPath)viper.SetConfigType("yaml")err := viper.ReadInConfig()if err != nil {log.Fatal("解析文件失败: ", err)}if err := viper.Unmarshal(&conf); err != nil {log.Fatal("解析文件失败: ", err)}// 监听配置更新viper.WatchConfig()viper.OnConfigChange(func(e fsnotify.Event) {if err := viper.Unmarshal(&conf); err != nil {log.Fatal("解析文件失败: ", err)}})

问题原因

image.png

Viper使用的是 github.com/mitchellh/mapstructure来解析值
mapstructure 用于将通用的map[string]interface{}解码到对应的 Go 结构体中
默认情况下,mapstructure 使用结构体中字段的名称做这个映射,不区分大小写,比如 Name 字段可以映射到
name、NAME、NaMe 等等,如果名称不一致没有指定 tagName ,则默认为 mapstructure,这也是为什么带下划线或者名称不一致的字段不加 mapstructure标签无法解析的原因

解决方案

mapstructure方法

通过mapstructure映射名称

image.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/731698.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

通过一篇文章带你玩转git和GitHub

Git和Github的基本用法 前言一、Git和Github的基本用法背景下载安装安装 git for windows安装 tortoise gitgit安装过程中的一些选项 tortoise git汉化教程下载tortoise git汉化安装包安装tortoise git汉化安装包 三、使用 Github 创建项目注册账号创建项目下载项目到本地 四、…

Excel转pdf

1、excel-内存值--Workbook 转pdf /** * excel To pdf * * param outPath 输出路径 * param workbook excel-内存值 * throws IOException */ public static void excelToPdf(String outPath,Workbook workbook) throws IOException, DocumentException { Document documentnul…

突然发现一个很炸裂的平台!

平时小孟会开发很多的项目,很多项目不仅开发的功能比较齐全,而且效果比较炸裂。 今天给大家介绍一个我常用的平台,因含低代码平台,开发相当的快。 1,什么是低代码 低代码包括两种,一种低代码,…

Java中的常用类(三)

一、正则表达式 正则表达式 regex,全称Regular Expression。正则表达式是一种规则(模式)匹配语法 可以使用一些正则表达式中的特殊符号来定义一种规则,然后用此规则匹配某个字符,如果字符串与规则匹配则返回true&…

【Docker1】Docker镜像和容器基本操作

Docker基本管理一、Docker概述1、为什么要用到容器?2、Docker是什么?3、Docker的设计宗旨4、容器的优点5、Docker与虚拟机的区别6、Docker的三大核心概念 二、安装Docker1、yum安装2、二进制安装 三、Docker镜像创建与操作1、Docker 镜像操作1.1 搜索镜像…

【JavaEE进阶】Spring中事务的实现

文章目录 🍃前言🌴事务简介🚩 什么是事务?🚩为什么需要事务?🚩事务的操作 🍀Spring 中事务的实现🚩Spring 编程式事务🚩Spring声明式事务Transactional🚩Transactional…

数字人民币钱包(二)

文章目录 前言一 什么是数字人民币钱包?二 怎么开通数字人民币钱包?三 数字人民币钱包有哪些?四 数字人民币钱包升级 前言 上篇文章梳理了什么是数字人民币,及其特征和相关概念,这篇文章来整理下数字人民币钱包。数字人…

selenium常用操作汇总

本文总结使用selenium进行web/UI自动化时,会用到的一些常用操作。 定位元素 driver.find_element_by_xpath()#1、绝对路径 2、元素属性 3、层级和属性结合 4、使用逻辑运算符 driver.find_element_by_id()#根据id定位,HTML规定id属性在HTML文档中必须是唯…

App拉起微信小程序参考文章

App拉起微信小程序参考文章h5页面跳转小程序-----明文URL Scheme_weixin://dl/business/?appid*appid*&path*path*&qu-CSDN博客文章浏览阅读561次,点赞16次,收藏5次。仅需两步,就能实现h5跳转小程序,明文 URL Scheme&…

vue2 vue-cli vue-router vuex

Vue2 插值表达式 利用表达式进行插值渲染,将数据渲染到页面中。 语法:{{ 表达式 }} PS: 使用的数据要存在支持的是表达式,不是语句 if、for不能在标签属性中使用{{ }} v-show和v-if v-show底层原理:切换css的dis…

SRC学习-成为赏金猎人

你是否对漏洞挖掘充满好奇?零基础或有基础但想更进一步?想赚取可观的漏洞赏金让自己有更大的自由度? 那么,不妨了解下土拨鼠的安全屋 这或许也是你成为漏洞赏金猎人的第一课。 逻辑漏洞挖掘手法与创新思路,带你突破…

@EnableWebMvc介绍和使用详细demo

EnableWebMvc是什么 EnableWebMvc 是 Spring MVC 中的一个注解,它用于启用 Spring MVC 框架的基本功能,以便你可以使用 Spring MVC 提供的特性来处理 Web 请求。 通常情况下,在基于 Spring Boot 的应用中,并不需要显式地使用 Ena…

GC--垃圾回收

目录 垃圾回收概念 什么是垃圾? 垃圾回收机制什么时候会进行GC?? 应该关心垃圾回收那些哪些区域的回收 垃圾回收相关算法 垃圾回收算法:[标记阶段、回收阶段] 垃圾标记阶段 标记阶段的目的 引用计数算法(目前没有在使用&…

实现类似 Word 协同编辑--Canvas-Editor

前言 对于word的协同编辑,已经构思很久了,但是没有找到合适的插件。今天推荐基于canvas/svg 的富文本编辑器 canvas-editor,能实现类似word的基础功能,如果后续有更好的,也会及时更新。 Canvas-Editor效果图: 官方文…

FFmpeg--AAC音频解码流程

文章目录 AAC 组成函数分析读aac帧写aac帧aac的head参数设置 运行结果 AAC 组成 AAC音频格式:是⼀种由MPEG-4标准定义的有损⾳频压缩格式 ADTS:是AAC音频的传输流格式 AAC音频文件的每一帧由ADTS Header和AAC Audio Data组成 每⼀帧的ADTS的头⽂件都包含了⾳频的采…

llama-index调用qwen大模型实现RAG

背景 llama-index在实现RAG方案的时候多是用的llama等英文大模型,对于国内的诸多模型案例较少,本次将使用qwen大模型实现llama-index的RAG方案。 环境配置 (1)pip包 llamaindex需要预装很多包,这里先把我成功的案例…

计算机网络——概述

计算机网络——概述 计算机网络的定义互连网(internet)互联网(Internet)互联网基础结构发展的三个阶段第一个阶段——APPANET第二阶段——商业化和三级架构第三阶段——全球范围多层次的ISP结构 ISP的作用终端互联网的组成边缘部分…

Python 映射函数map()详解

一、映射函数定义 它用于对容器中的元素进行映射(或变换) 二、映射函数语法 map(function, iterable) function:一个提供变换规则的函数,返回变换之后的元素iterable:一个或多个序列(可迭代对象&#xff09…

新零售SaaS架构:订单履约系统架构设计(万字图文总结)

什么是订单履约系统? 订单履约系统用来管理从接收客户订单到将商品送达客户手中的全过程。 它连接了上游交易(客户在销售平台下单环)和下游仓储配送(如库存管理、物流配送),确保信息流顺畅、操作协同&…

【ElasticSearch】es索引、映射、文档基本操作复杂查询

各位小伙伴们大家好,欢迎来到这个小扎扎的ElasticSearch专栏,本篇博客由B战尚硅谷的ElasticSearch视频总结而来,鉴于 看到就是学到、学到就是赚到 精神,这波依然是血赚 ┗|`O′|┛ 🌆 内容速览 1 es数据格…