go如何读取yaml配置文件?

本文涉及的产品
云数据库 Tair(兼容Redis),内存型 2GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
简介: 本文介绍了如何在Go项目中利用YAML文件进行配置管理,以简化变量更改及维护工作。首先,通过`go get gopkg.in/yaml.v3`命令安装YAML处理库。接着,展示了如何创建并解析YAML配置文件,包括定义结构体映射YAML字段、读取文件内容以及错误处理等步骤。此外,还提供了通过Go代码生成YAML文件的方法。使用`gopkg.in/yaml.v3`库能够有效提升项目的可维护性和开发效率。

前言

在项目开发中,经常需要把一些配置文件常量提取到统一配置文件进行维护,因为这样对于改变量以及维护非常方便,对于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配置文件中,易于程序维护,可以提高开发效率,但是程序技术很多,每个人开发习惯不同,在开发中,根据个人喜好开发


转载来源:https://juejin.cn/post/7302322661958139940

相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore     ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库 ECS 实例和一台目标数据库 RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
相关文章
|
4月前
|
JSON 运维 Go
Go 项目配置文件的定义和读取
Go 项目配置文件的定义和读取
|
3月前
|
关系型数据库 MySQL Go
go抽取mysql配置到yaml配置文件
go抽取mysql配置到yaml配置文件
|
3月前
|
Python
Python 解析 yaml 配置文件
Python 解析 yaml 配置文件
63 0
|
4月前
|
XML JSON Go
微服务架构下的配置管理:Go 语言与 yaml 的完美结合
微服务架构下的配置管理:Go 语言与 yaml 的完美结合
|
4月前
|
机器学习/深度学习 计算机视觉 Python
深度学习项目中在yaml文件中定义配置,以及使用的python的PyYAML库包读取解析yaml配置文件
深度学习项目中在yaml文件中定义配置,以及使用的python的PyYAML库包读取解析yaml配置文件
165 0
|
5月前
|
消息中间件 SQL Kafka
实时计算 Flink版产品使用问题之从检查点重启任务,怎么在YAML配置文件中添加检查点的路径
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
实时计算 Flink版产品使用问题之从检查点重启任务,怎么在YAML配置文件中添加检查点的路径
|
5月前
|
JSON Go API
go项目实现通过配置文件进行配置项统一管理
go项目实现通过配置文件进行配置项统一管理
36 0
|
6月前
|
监控 Go
go语言并发实战——日志收集系统(十一)基于etcd来监视配置文件的变化
go语言并发实战——日志收集系统(十一)基于etcd来监视配置文件的变化
|
6月前
|
消息中间件 Kafka Go
go语言并发实战——日志收集系统(五) 基于go-ini包读取日志收集服务的配置文件
go语言并发实战——日志收集系统(五) 基于go-ini包读取日志收集服务的配置文件
|
JSON Prometheus Cloud Native
Grabana:使用 Golang 或 Yaml 生成 Grafana Dashboard
使用 Golang 或 Yaml 生成 Grafana Dashboard
1808 0