首页 > 其他分享 >使用 gopkg.in/yaml.v3 解析 YAML 数据

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

时间:2023-09-26 09:57:49浏览次数:32  
标签:Database fmt YAML gopkg v3 yaml

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 包。使用以下命令来获取:

go get gopkg.in/yaml.v3

解析 YAML 数据

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

创建 YAML 数据

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

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 数据:

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 数据,并输出配置项的值。

运行程序

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

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 数据。

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 格式的数据,无论是从文件中读取配置还是将配置写入文件,都变得非常简单。


孟斯特

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


标签:Database,fmt,YAML,gopkg,v3,yaml
From: https://www.cnblogs.com/lianshuiwuyi/p/17729428.html

相关文章

  • pytest + yaml 框架 -56. 输出日志优化+allure报告优化
    前言v1.4.8版本优化接口请求和响应输出日志,生成的allure报告也按步骤优化request和response详情日志优化日志用例test_log1:-name:log1request:url:http://127.0.0.1:8000/api/test/demomethod:GETvalidate:-eq:[status_code,200]-eq:......
  • Android Failed to resolve: com.github.PhilJay:MPAndroidChart:v3.1.0
    2022.3.1版本修改settings.gradledependencyResolutionManagement{repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)repositories{maven{url"https://jitpack.io"}//Addthisrepositoryjcenter()//orotherrep......
  • k8s yaml文件总结
    k8s支持yaml和JSON格式创建资源对象,json用于接口之间消息传递,适用于开发;yaml格式用于配置和管理,适用于云平台管理,yaml简洁非标记性语言1.yaml相关基础概念  yaml语法规则:  大小写敏感;缩进表示层级关系;缩进不允许使用tab键,只允许使用空格;#表示注释---为可选分隔符,当需要......
  • pytest + yaml 框架 -55. raw 不转义模板语法
    前言在yaml文件中,设置的引用变量语法是${var},最近有小伙伴提到一个需求:请求参数的内容需要有特殊符号${var},希望不被转义,不要引用变量,直接用原始数据即可。raw忽略模板语法Jinja2提供了"raw"语句来忽略所有模板语法。语法示例{%raw%}hello${var}world!{%end......
  • ubuntu20安装opencv3.4.9 多版本
    1下载源码下载源码https://github.com/opencv/opencv/releases/tag/3.4.9  下载扩展源码 https://github.com/opencv/opencv_contrib/releases/tag/3.4.9 2安装依赖sudoapt-getupdatesudoapt-getinstall-ybuild-essentialcmakegitlibgtk2.0-devpkg-......
  • JeecgBoot v3.5.5 版本发布,性能大升级版本—开源免费的低代码开发平台
    项目介绍JeecgBoot是一款企业级的低代码平台!前后端分离架构SpringBoot2.x,SpringCloud,AntDesign&Vue3,Mybatis-plus,Shiro,JWT支持微服务。强大的代码生成器让前后端代码一键生成!JeecgBoot引领低代码开发模式(OnlineCoding->代码生成->手工MERGE),帮助解决Java项目70%的重复......
  • # github.com/coreos/etcd/clientv3/balancer/resolver/endpoint
    linux使用go连接etcd集群时报错:#github.com/coreos/etcd/clientv3/balancer/resolver/endpoint/root/go/pkg/mod/github.com/coreos/[email protected]+incompatible/clientv3/balancer/resolver/endpoint/endpoint.go:114:87:undefined:resolver.BuildOption/root/go/pkg/mod/g......
  • 用yaml写接口自动化
    原接口测试用例importpytestimportrequestsclassTestApi:deftest_01_huahua(self):url='https//api.weixin.qq.com/cgi-bin/token'params={"grant_type":"client_credential","......
  • yaml文件读取
    yaml文件 读取Yaml文件importyamlclassYamlUtil:def__init__(self,yaml_file):"""通过init方法把Yaml文件传入到这个类:paramyaml_file:"""self.yaml_file=yaml_file#读取Yaml文件defre......
  • ansible-yaml基本了解
    1.yaml了解YAML是"YAMLAin’taMarkupLanguage"(YAML不是一种标记语言)的递归缩写;是一个可读性高,用来表达数据序列化的格式。YAML的应用场景:SpringBoot的配置文件,ansible0playbook构建指令。2.yaml规则1.大小写敏感;2.使用缩进代表层级关系,缩进只能使用空格,不能使用TAB,不要......