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

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

文章目录

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

安装yaml依赖库

命令行执行如下命令:

go 复制代码
go get gopkg.in/yaml.v3

配置yaml文件

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

go 复制代码
app:
  name: code-go
  version: v0.0.1
  introduction: "code-go是一个学习go的项目~"
server:
  host: localhost
  port: 8080
  appMode: debug # debug  开发模式   release  生产模式

database:
  mysql:
    # 用户名
    username: root
    # 密码
    password: 123456
    # 数据库名
    database: code-go
    # 主机地址
    host: localhost
    # 端口
    port: 3306
    # 是否开启日志
    log-mode: true

redis:
  host: localhost
  port: 6379
  password: ""
  db: 0 #数据库编号

log:
  # 通道数据大小
  chan-size: 30
  # 每三条保存数据一次
  save-log-num: 3

解析yaml文件

go 复制代码
package core

import (
	"fmt"
	"gopkg.in/yaml.v3"
	"os"
)

var Config YamlConfig

type 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

终端打印:

相关推荐
Bs_MoneyMagnet17 分钟前
基于springboot+vue的旅游景区点评系统的设计与实现 源码+文档
java·vue.js·spring boot·后端·spring·旅游
cpp_learner26 分钟前
Qt 5.14.2 x86_64 静态编译 —— 从零搭建完整手册
后端
ch.ju1 小时前
Java—idea知识:如何创建新项目
java·开发语言·intellij-idea
Evand J1 小时前
【MATLAB例程,图像滤波降噪12】加权中值滑动窗口滤波(WMF)图像降噪,包含滤波质量评价。附代码下载链接
开发语言·图像处理·人工智能·计算机视觉·matlab·滑动窗口·滤波
Tairitsu_H1 小时前
[C++] C++11类和STL的新特性
开发语言·c++·stl·c++11
承渊政道1 小时前
Python IDLE鸿蒙PC适配全记录:从Tkinter桌面程序到ArkUI原生开发闭环
开发语言·python·harmonyos·鸿蒙系统·桌面程序
YMWM_1 小时前
查看realsense相机序列号脚本
开发语言·python·数码相机
传奇开心果编程2 小时前
【dioxus0.7基础语法学与练】第8课:RSX 宏 — Dioxus 声明式 UI 语法
开发语言·学习·rust
企业数字化笔记2 小时前
固定资产历史数据怎么导入系统?Excel模板、字段映射和数据校验
android·java·数据库·后端
西瓜太郎12342 小时前
request_id 如何串起请求、路由、计费和日志
后端·python