【go语言开发】yaml文件配置和解析

本文主要介绍使用第三方库来对yaml文件配置和解析。首先安装yaml依赖库;然后yaml文件中配置各项值,并给出demo参考;最后解析yaml文件,由于yaml文件的配置在全局中可能需要,可定义全局变量Config,便于调用

文章目录

  • 安装yaml依赖库
  • 配置yaml文件
  • 解析yaml文件

欢迎大家访问个人博客网址:https://www.maogeshuo.com,博主努力更新中…

安装yaml依赖库

命令行执行如下命令:

go get gopkg.in/yaml.v3

配置yaml文件

config-dev.yaml 文件中配置所需key-value,参考如下文件配置

app:name: code-goversion: v0.0.1introduction: "code-go是一个学习go的项目~"
server:host: localhostport: 8080appMode: debug # debug  开发模式   release  生产模式database:mysql:# 用户名username: root# 密码password: 123456# 数据库名database: code-go# 主机地址host: localhost# 端口port: 3306# 是否开启日志log-mode: trueredis:host: localhostport: 6379password: ""db: 0 #数据库编号log:# 通道数据大小chan-size: 30# 每三条保存数据一次save-log-num: 3

解析yaml文件

package coreimport ("fmt""gopkg.in/yaml.v3""os"
)var Config YamlConfigtype YamlConfig struct {App      App            `yaml:"app"`Server   ServerConfig   `yaml:"server"`Database DatabaseConfig `yaml:"database"`Redis    RedisConfig    `yaml:"redis"`Log      LogConfig      `yaml:"log"`
}type App struct {Name         string `yaml:"name"`Version      string `yaml:"version"`Introduction string `yaml:"introduction"`
}type ServerConfig struct {Host    string `yaml:"host"`Port    int    `yaml:"port"`AppMode string `yaml:"appMode"`
}type DatabaseConfig struct {Mysql MysqlConfig `yaml:"mysql"`
}type MysqlConfig struct {UserName string `yaml:"username"`Password string `yaml:"password"`Database string `yaml:"database"`Host     string `yaml:"host"`Port     string `yaml:"port"`LogMode  bool   `yaml:"log-mode"`
}type RedisConfig struct {Host     string `yaml:"host"`Port     int    `yaml:"port"`Password string `yaml:"password"`Db       int    `yaml:"db"`
}type LogConfig struct {ChanSize   int `yaml:"chan-size"`SaveLogNum int `yaml:"save-log-num"`
}// InitConfigDev 初始化yaml config
func InitConfigDev() error {file, err := os.ReadFile("./config-dev.yaml")if err != nil {LOG.Println("read config-dev.yaml fail", err)return err}err = yaml.Unmarshal(file, &Config)if err != nil {LOG.Println("yaml unmarshal fail")return err}return nil
}// PrintConfig 打印配置
func PrintConfig() {fmt.Println("**************************************************")fmt.Println("*                        ")fmt.Println("*   Welcome to code-go   ")fmt.Printf("*   Introduction: %s\n", Config.App.Introduction)fmt.Printf("*   Environment: %s\n", Config.Server.AppMode)fmt.Printf("*   Click url:http://localhost:%d\n", Config.Server.Port)fmt.Printf("*   Swagger url: http://localhost:%d/swagger/index.html\n", Config.Server.Port)fmt.Println("*                        ")fmt.Println("**************************************************")
}

定义了一个YamlConfig结构体,并在结构体中嵌套了App、ServerConfig等结构体,以对应YAML文件中的不同层级。

通过使用.ReadFile函数读取YAML文件的内容,然后使用yaml.Unmarshal函数将文件内容解析为结构体对象。在Unmarshal函数的第二个参数中,传入了指向config结构体的指针,以便将解析后的内容赋值给结构体。

最后,我们可以通过PrintConfig访问结构体的字段来获取解析后的配置信息,并进行相应的操作。

注意:
博主将config-dev.yaml 放在项目根目录下,因此调用os.ReadFile 配置的./config-dev.yaml

终端打印:
在这里插入图片描述

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

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

相关文章

CCProxy代理服务器地址的设置步骤

目录 前言 一、下载和安装CCProxy 二、启动CCProxy并设置代理服务器地址 三、验证代理服务器设置是否生效 四、使用CCProxy进行代理设置的代码示例 总结 前言 CCProxy是一款常用的代理服务器软件,可以帮助用户实现网络共享和上网代理。本文将详细介绍CCProxy…

【yolov中的训练批次batch】详细介绍

文章目录 1.概要2. 主要参与的操作3. 提高计算效率和模型的稳定性4.对小目标检测的影响 1.概要 在 YOLO(You Only Look Once)算法中,训练批次(batch)指的是一次优化模型参数的数据批次。在目标检测任务中,每…

【鸿蒙 HarmonyOS 4.0】应用状态:LocalStorage/AppStorage/PersistentStorage

一、介绍 如果要实现应用级的,或者多个页面的状态数据共享,就需要用到应用级别的状态管理的概念。 LocalStorage:页面级UI状态存储,通常用于UIAbility内、页面间的状态共享。AppStorage:特殊的单例LocalStorage对象&…

数据库系统概念(第一周)

⚽前言 🏐四个基本概念 一、数据 定义 种类 特点 二、数据库 三、数据库管理系统(DBMS) 四、 数据库系统(DBS) 🏀数据库系统和文件系统对比 文件系统的弊端 🥎数据视图 数据抽象 …

java 环境配置(保姆级最新版)

😀前言 ps 因为网络上教程太多太杂所以干脆直接自己出个教程方便自己复习也希望帮助到大家 文章目录 第一查看自己电脑的系统类型第二 jdk下载历史jdk下载 第三 jdk安装第四 环境搭配Java_Home 配置Path 配置CLASSPATH 配置 检测是否配置成功 第一查看自己电脑的系统…

机器学习流程—数据预处理 清洗

机器学习流程—数据预处理 清洗 数据清洗因为它涉及识别和删除任何丢失、重复或不相关的数据。数据清理的目标是确保数据准确、一致且无错误,因为不正确或不一致的数据会对 ML 模型的性能产生负面影响。专业数据科学家通常会在这一步投入大量时间,因为他们相信Better data b…

Dynamo3.0.3——六年来最大的更新

Hello大家好!我是九哥~ 前几天,Dynamo Core 3.0.0版本发布,迎来了Dynamo六年来最大的一次更新。最大的改变,是更新到了.net8,这回对Dynamo节点包产生不小影响。接下来我们详细看一下都有哪些变化。 首先&#xff0…

进⼊ Redis 的世界-初识 Redis【雨林精品】

本章将带领读者进⼊ Redis 的世界,了解它的前世今⽣、众多特性 初识 Redis Redis 是⼀种基于键值对(key-value)的 NoSQL 数据库(非关系型数据库),与很多键值对数据库不同的是,Redis 中的 valu…

Charles的安装及配置

1 Charles激活 激活网址:https://tools.zzzmode.com/mytools/charles/ 得到的激活码后打开Charles,选择help里的registered 进行登录 2 进行ssl代理设置(用来抓取https的请求) 3 输入ssl代理的host和port 4 安装本机证书(选择完成后点击下一步或确定就行) 手机相关配置(保持手…

Effective C++ 学习笔记 条款19 设计class犹如设计type

C就像在其他OOP(面对对象编程)语言一样,当你定义一个新class,也就定义了一个新type。身为C程序员,你的许多时间主要用来扩张你的类型系统(type system)。这意味你不只是class设计者,…

瑞_23种设计模式_模板方法模式

文章目录 1 模板方法模式(Template Pattern) ★ 钩子函数1.1 介绍1.2 概述1.3 模板方法模式的结构1.4 模板方法模式的优缺点1.5 模板方法模式的使用场景 2 案例一2.1 需求2.2 代码实现 3 案例二3.1 需求3.2 代码实现 4 JDK源码解析(InputStre…

[BUUCTF]-PWN:starctf_2019_babyshell解析(汇编\x00开头绕过+shellcode)

查看保护 查看ida 这里就是要输入shellcode,但是函数会有检测。 在shellcode前面构造一个以\x00机器码开头的汇编指令,这样就可以绕过函数检查了。 完整exp: from pwn import* context(log_leveldebug,archamd64) pprocess(./babyshell)she…

经上的人物( 4):没什么特长的摩西凭啥能当上领袖?

说起摩西,你或许听过《摩西五经》或“举杖劈开红海”的故事,摩西是旧约中的一个领袖型的人物,他的主要任务是带领在埃及做奴隶的以色列人,离开埃及前往迦南地。 但你知道吗?摩西在一开始接到任务时,他是极度…

【C++】C语言为什么不能函数重载?

文章目录 1.概念2. C为什么支持函数重载? 1.概念 C允许功能类似的同名函数出现,只要形参列表中的参数个数、类型、类型顺序不同,满足这三个条件中任意一个则构成函数重载,函数重载常用来处理实现功能类似数据类型不同的问题。 /…

【Docker4】使用Harbor搭建私有仓库

Docker私有仓库一、搭建本地私有仓库1、daemon.json 配置文件中常用配置项2、搭建私有仓库3、Docker容器重启策略 二、Docker--harbor私有仓库部署与管理1、Harbor 简介2、Harbor的特性3、Harbor的构成4、Harbor 部署4.1、部署 Docker-Compose 服务4.2、部署 Harbor 服务4.3、启…

微信小程序二维数组示例

二维数组在小程序的开发中经常用到,整理如下 // pages/shuzu/shuzu.js Page({/*** 页面的初始数据*/data: {arry:[{name:凉拌茄子,mix:[茄子,蒜末,小米椒,葱花]},{name:清炒丝瓜,mix:[丝瓜,盐,糖]}],week: [{name:星期一,mix:03-08},{name:星期二,mix:03-08},{name…

西班牙语日常对话 和邻居,柯桥西班牙语培训

El vecino 邻居 A: Ah viene el vecino. 来了个邻居 B: Lo conoces? 你认识他吗? A: No, no lo conozco. Y t ? 不,我不认识, 你呢? B: Tampoco. 我也不认识 重要单词 ah ,那里 conocer ,认识 ta…

三分钟补算法系列(一)

1.什么是算法 在计算机领域内,算法是一系列程序指令,用于处理特定的运算和逻辑问题。 衡量算法优劣的主要标准是时间复杂度和空间复杂度。 2.什么是数据结构? 数据结构是数据的组织、管理和存储格式,其使用目的是为了高效地访…

解决文件过大无法存入U盘

如果文件达到4GB以上大小,且还是比U盘容量小,却放不进去。 这是由于格式问题。 U盘默认格式是FAT32,存放的单个文件大小不能超过4GB 可以修改U盘格式为exFAT或者NTFS格式。这样不会收到限制 下面以Windows11系统进行演示: 1.连接U盘 2.按WINe打开文件管理器 3.点击"文件…

雷卯的ESD管SDA3311DN可以替代AZ5883-01F ---国产化替代篇

已经有很多客户选用雷卯的 SDA3311DN替代Amazing的 AZ5883-01F,客户可以获得更好的价格和更快的交期。 SDA3311DN主要应用于对3.3V供电的静电浪涌防护等,特别是在一些受空间所限的小电子设备很受青睐。 雷卯的SDA3311DN优势: IPP大(65A) &…