go读取yaml配置文件

前言

在项目开发中,经常需要把一些配置文件常量提取到统一配置文件进行维护,因为这样对于改变量以及维护非常方便,对于Java的Sringboot项目,有applocation.properties或者yml或者yaml等文件,go项目开发中,可以把需要维护的常量或者配置提取到yaml文件,因为YAML 的语法和其他高级语言类似,并且可以简单表达清单、散列表,标量等数据形态,对于项目修改配置非常方便

go安装yaml组件

使用以下命令安装依赖包

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

yaml使用

在项目中创建test.yaml配置文件

配置文件内容如下

yaml 复制代码
hello:
  name: 127.0.0.1
  age: 3306

redis:
  host: 127.0.0.1
  port: 6379
  password: 123456

读取yaml内容

使用程序读取yaml配置文件内容,内容如下:

go 复制代码
package main

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

type Config struct {
	Hello `yaml:"hello"`
	Redis `yaml:"redis"`
}

type Hello struct {
	Name string `yaml:"name"`
	Age  int    `yaml:"age"`
}

type Redis struct {
	Host     string `yaml:"host"`
	Port     int    `yaml:"port"`
	Password string `yaml:"password"`
}

func main() {
	dataBytes, err := os.ReadFile("test.yaml")
	if err != nil {
		fmt.Println("读取文件失败:", err)
		return
	}
	fmt.Println("yaml 文件的内容:\n", string(dataBytes))
	config := Config{}
	err = yaml.Unmarshal(dataBytes, &config)
	if err != nil {
		fmt.Println("解析 yaml 文件失败:", err)
		return
	}
	fmt.Printf("config内容为:\n", config)

	mp := make(map[string]any, 2)
	err = yaml.Unmarshal(dataBytes, mp)
	if err != nil {
		fmt.Println("解析 yaml 文件失败:", err)
		return
	}
	fmt.Println("内容为:", mp)

}

结果为:

使用yaml可以指定对应配置文件名称

go创建yaml文件

go也可以通过程序生成yaml文件,程序如下

go 复制代码
package main

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

type Config struct {
	Hello `yaml:"hello"`
	Redis Redis `yaml:"redis"`
}

type Hello struct {
	Name string `yaml:"name"`
	Age  int    `yaml:"age"`
}

type Redis struct {
	Host     string `yaml:"host"`
	Port     int    `yaml:"port"`
	Password string `yaml:"password"`
}

func main() {
	var data = Config{
		Hello: Hello{
			Name: "aaa",
			Age:  12,
		},
		Redis: Redis{
			Host:     "127.0.0.1",
			Port:     6379,
			Password: "121321",
		},
	}
	file, err := os.Create("./1.yaml")
	defer func(file *os.File) {
		err := file.Close()
		if err != nil {

		}
	}(file)
	if err != nil {
		fmt.Println("创建文件失败:", err)
		return
	}
	// 创建编码器
	encoder := yaml.NewEncoder(file)
	err = encoder.Encode(&data)
	if err != nil {
		fmt.Println("Error encoding YAML:", err)
		return
	}
	fmt.Println("创建成功")
}

总结

gopkg.in/yaml.v3 是一个功能强大的 Go 库,用于解析和生成 YAML 数据,在开发中,可以将配置提取到yaml配置文件中,易于程序维护,可以提高开发效率,但是程序技术很多,每个人开发习惯不同,在开发中,根据个人喜好开发

相关推荐
十年编程老舅11 小时前
虾皮C++一面:C++四种类型转换详解
程序员·编程·c/c++
紫雾凌寒12 小时前
【 HarmonyOS 面试题】2026 最新 ArkTS 语言基础面试题
华为·面试·程序员·华为云·职场发展·harmonyos·arkts
小马爱打代码14 小时前
SpringBoot:封装 starter
java·spring boot·后端
STARSpace888814 小时前
SpringBoot 整合个推推送
java·spring boot·后端·消息推送·个推
Marktowin15 小时前
玩转 ZooKeeper
后端
蓝眸少年CY15 小时前
(第十二篇)spring cloud之Stream消息驱动
后端·spring·spring cloud
码界奇点15 小时前
基于SpringBoot+Vue的前后端分离外卖点单系统设计与实现
vue.js·spring boot·后端·spring·毕业设计·源代码管理
lindd91191116 小时前
4G模块应用,内网穿透,前端网页的制作第七讲(智能头盔数据上传至网页端)
前端·后端·零基础·rt-thread·实时操作系统·项目复刻
Loo国昌16 小时前
【LangChain1.0】第八阶段:文档处理工程(LangChain篇)
人工智能·后端·算法·语言模型·架构·langchain
vx_bisheyuange17 小时前
基于SpringBoot的海鲜市场系统
java·spring boot·后端·毕业设计