Loading [MathJax]/jax/input/TeX/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >使用 gopkg.in/yaml.v3 解析 YAML 数据

使用 gopkg.in/yaml.v3 解析 YAML 数据

原创
作者头像
孟斯特
修改于 2023-10-10 09:16:02
修改于 2023-10-10 09:16:02
2.9K0
举报
文章被收录于专栏:code人生code人生

YAML(YAML Ain't Markup Language)是一种人类可读的数据序列化格式,常用于配置文件和数据交换。在 Go 语言中,你可以使用 gopkg.in/yaml.v3 包来解析和生成 YAML 数据。本文将介绍如何使用 gopkg.in/yaml.v3 来处理 YAML 数据。

安装 gopkg.in/yaml.v3

首先,你需要安装 gopkg.in/yaml.v3 包。使用以下命令来获取:

代码语言:shell
AI代码解释
复制
go get gopkg.in/yaml.v3

解析 YAML 数据

下面是一个简单的示例,演示了如何使用 gopkg.in/yaml.v3 解析 YAML 数据。

创建 YAML 数据

首先,创建一个包含 YAML 数据的文件,例如 config.yaml

代码语言:yaml
AI代码解释
复制
server:
  port: 8080
  host: localhost
database:
  host: db.example.com
  port: 5432
  username: user
  password: secret

使用 gopkg.in/yaml.v3 解析 YAML

接下来,在你的 Go 代码中使用 gopkg.in/yaml.v3 包来解析 YAML 数据:

代码语言:go
AI代码解释
复制
package main

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

type Config struct {
    Server   ServerConfig   `yaml:"server"`
    Database DatabaseConfig `yaml:"database"`
}

type ServerConfig struct {
    Port int    `yaml:"port"`
    Host string `yaml:"host"`
}

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

func main() {
    // 打开 YAML 文件
    file, err := os.Open("config.yaml")
    if err != nil {
        fmt.Println("Error opening file:", err)
        return
    }
    defer file.Close()

    // 创建解析器
    decoder := yaml.NewDecoder(file)

    // 配置对象
    var config Config

    // 解析 YAML 数据
    err = decoder.Decode(&config)
    if err != nil {
        fmt.Println("Error decoding YAML:", err)
        return
    }

    // 输出配置项
    fmt.Printf("Server Port: %d\n", config.Server.Port)
    fmt.Printf("Server Host: %s\n", config.Server.Host)
    fmt.Printf("Database Host: %s\n", config.Database.Host)
    fmt.Printf("Database Port: %d\n", config.Database.Port)
    fmt.Printf("Database Username: %s\n", config.Database.Username)
    fmt.Printf("Database Password: %s\n", config.Database.Password)
}

在上述代码中,我们首先打开 YAML 文件,然后创建一个 yaml.Decoder 对象来解码 YAML 数据。然后,我们定义了一个配置结构体,该结构体对应于 YAML 数据的结构。最后,我们使用 decoder.Decode() 函数来解析 YAML 数据,并输出配置项的值。

运行程序

运行上述程序,你将看到它输出配置文件中的值:

代码语言:shell
AI代码解释
复制
Server Port: 8080
Server Host: localhost
Database Host: db.example.com
Database Port: 5432
Database Username: user
Database Password: secret

生成 YAML 数据

除了解析 YAML 数据,gopkg.in/yaml.v3 也支持生成 YAML 数据。下面是一个示例,演示如何创建并保存 YAML 数据。

代码语言:go
AI代码解释
复制
package main

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

type Config struct {
	Server   ServerConfig   `yaml:"server"`
	Database DatabaseConfig `yaml:"database"`
}

type ServerConfig struct {
	Port int    `yaml:"port"`
	Host string `yaml:"host"`
}

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

func main() {
	config := Config{
		Server: ServerConfig{
			Port: 8080,
			Host: "localhost",
		},
		Database: DatabaseConfig{
			Host:     "db.example.com",
			Port:     5432,
			Username: "user",
			Password: "secret",
		},
	}

	// 创建文件
	file, err := os.Create("output.yaml")
	if err != nil {
		fmt.Println("Error creating file:", err)
		return
	}
	defer file.Close()

	// 创建编码器
	encoder := yaml.NewEncoder(file)

	// 将配置编码为 YAML 数据
	err = encoder.Encode(&config)
	if err != nil {
		fmt.Println("Error encoding YAML:", err)
		return
	}

	fmt.Println("YAML data saved to output.yaml")
}

在上述代码中,我们首先创建一个配置对象,然后创建文件 output.yaml。接下来,我们使用 yaml.NewEncoder() 函数创建一个编码器,并使用 encoder.Encode() 函数将配置对象编码为 YAML 数据。最后,我们将生成的 YAML 数据保存到文件中。

最后

gopkg.in/yaml.v3 是一个功能强大的 Go 库,用于解析和生成 YAML 数据。它支持复杂的 YAML 结构,可以轻松地读取和写入配置文件。通过使用这个库,你可以方便地在你的 Go 项目中处理 YAML 格式的数据,无论是从文件中读取配置还是将配置写入文件,都变得非常简单。

我正在参与2023腾讯技术创作特训营第二期有奖征文,瓜分万元奖池和键盘手表


声明:本作品采用署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0)进行许可,使用时请注明出处。


原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Go 语言处理 yaml 文件
在当前的微服务时代,每个服务通常独立部署,并且可能有其自身的配置需求。应用程序配置文件通常用于存储设置和参数,以配置应用程序的操作方式。这些文件与代码分离,使开发人员可以在不修改源代码的情况下调整应用程序的行为。有几种流行的配置文件格式,包括JSON、YAML、TOML、XML和INI。每种格式都有其优势和适用场景。
FunTester
2025/01/23
1280
Go 语言处理 yaml 文件
Go 语言读取 YAML 配置文件教程
YAML 是一种易读易写的配置文件格式,本教程将指导你如何在 Go 中读取和解析 YAML 文件。
小锟哥哥
2023/11/27
2K0
Go 语言读取 YAML 配置文件教程
Go viper 配置文件读取工具
viper 提供默认 Viper对象, 可直接使用。 也通过 New 方法创建自定义Viper
copy_left
2020/08/11
1.8K0
使用Golang反射技术实现一套有默认值的配置解析库
在实际开发中,我们往往会给一个逻辑设计一套配置文件,用于根据不同环境加载不同配置。 比如生产环境和测试环境数据库的地址不一样,我们就需要在配置文件中设置不同的值。但是配置文件中又有一些相同值的配置项,比如数据库的名称等。难道相同的配置要像下面这样写多次吗?
方亮
2023/08/09
1810
Golang 实现 Yaml编码和解码入门
首先,我们需要在Go项目中引入相应的依赖。Go官方提供了​​gopkg.in/yaml.v2​​包来处理Yaml编码和解码。在命令行中执行以下命令来引入依赖:
大盘鸡拌面
2023/11/02
9120
如何读取yaml,json,ini等配置文件【Golang 入门系列九】
本文转载自如何读取yaml,json,ini等配置文件【Golang 入门系列九】 前面已经讲过一些Go语言的基础知识,感兴趣的朋友可以先看看之前的文章。https://www.cnblogs.com/zhangweizhong/category/1275863.html。
ccf19881030
2021/01/04
2.3K0
go如何读取yaml配置文件?
在项目开发中,经常需要把一些配置文件常量提取到统一配置文件进行维护,因为这样对于改变量以及维护非常方便,对于Java的Sringboot项目,有applocation.properties或者yml或者yaml等文件,go项目开发中,可以把需要维护的常量或者配置提取到yaml文件,因为YAML 的语法和其他高级语言类似,并且可以简单表达清单、散列表,标量等数据形态,对于项目修改配置非常方便
程序猿川子
2024/08/26
1150
go如何读取yaml配置文件?
Go中级之手把手教你开发一个简易的个人博客网站(二)项目配置独立化
此文是个人学习归纳的记录,腾讯云独家发布,未经允许,严禁转载,如有不对, 还望斧正, 感谢!
言志志
2023/12/24
8671
Go中级之手把手教你开发一个简易的个人博客网站(二)项目配置独立化
基于redisgo的redis客户端的封装示例
redisgo是一款go语言的redis客户端库。 为了简化对redis的操作,可以使用redisgo对redis常用命令进行封装。 首先在Github上面创建一个仓库redisgoExample 然后git clone将项目克隆到本地,比如说我的阿里云CentOS8服务器下,
ccf19881030
2021/01/02
2K0
用go-module作为包管理器搭建go的web服务器
本篇博客主要介绍了如何从零开始,使用Go Module作为依赖管理,基于Gin来一步一步搭建Go的Web服务器。并使用Endless来使服务器平滑重启,使用Swagger来自动生成Api文档。
SH的全栈笔记
2019/10/20
1.7K0
分布式学习十二:zookeeper实现数据订阅/发布
通过zk.getW方法,获取数据并返回一个event单向通道,通过此通道可监听获取一条事件更改数据:
仙士可
2022/03/26
6620
分布式学习十二:zookeeper实现数据订阅/发布
手把手,带你从零封装Gin框架(四):数据库初始化(GORM)
许多框架都会引入 ORM 模型来表示模型类和数据库表的映射关系,这一篇将使用 gorm[1] 作为 ORM 库,它遵循了 ActiveRecord(模型与数据库表一一对应) 模式,并且提供了强大的功能,例如模型关联、关联预加载、数据库迁移等,更多内容查看官方文档[2]
用户10002156
2024/01/10
2.3K0
手把手,带你从零封装Gin框架(四):数据库初始化(GORM)
Go 读取 YAML 配置文件的两种方式
在日常开发中,YAML 格式的文件基本上被默认为是配置文件,其内容因为缩进带来的层级感看起来非常直观和整洁。本文将会对 YAML 内容的读取进行介绍。
陈明勇
2023/10/15
1K0
Go 读取 YAML 配置文件的两种方式
使用 Go 开发一个简单的 YAML 文件翻译小工具
有时我们需要翻译 YAML 文件的内容,但目前缺乏一个专门针对 YAML 的便捷翻译工具。为此,我们可以自己开发一个定制化的工具。本文将介绍如何使用 Go 语言开发一个简单的 YAML 文件翻译工具。
陈明勇
2024/10/18
2640
使用golang解析yaml、json、xml文件
YAML(YAML 不是标记语言)是一种人类可读的数据序列化语言。它通常用于配置文件,但也用于数据存储或传输。YAML 本身支持三种基本数据类型:标量(例如字符串、整数和浮点数)、列表和映射(字典/哈希)。我们使用 yaml.v3 包来解析yaml文件
没有故事的陈师傅
2021/10/19
12K1
Go每日一库之4:go-ini
ini 是 Windows 上常用的配置文件格式。MySQL 的 Windows 版就是使用 ini 格式存储配置的。
luckpunk
2023/09/12
3450
Go程序动态加载YAML配置文件
有些情况下,我们希望程序在运行时能够根据配置文件的变化自动调整其行为,无需手动重启。这种模式在微服务和分布式系统中尤其常见,允许我们在不打断服务的情况下动态调整系统参数。
运维开发王义杰
2023/08/10
1K0
Go程序动态加载YAML配置文件
go yaml 语法学习
kubernetes底层yaml也是这个库,但是自己又封装了 sigs.k8s.io/yaml, 再往上又定义了kustomize
solate
2022/05/13
1.9K0
2.Go语言编程学习课后实践
示例1.利用reflect反射实现一个ini配置文件的读取 (ini 文件解析器)。
全栈工程师修炼指南
2022/09/29
7480
2.Go语言编程学习课后实践
Go实战--golang中使用RethinkDB(gorethink/gorethink.v3)
生命不止,继续go go go !!! 关于golang中操作数据库,曾经介绍了不少: Go实战–go语言操作sqlite数据库(The way to go) Go实战–go语言操作MySQL数据库
程序员的酒和故事
2018/03/12
1.9K0
Go实战--golang中使用RethinkDB(gorethink/gorethink.v3)
相关推荐
Go 语言处理 yaml 文件
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档