Golang Go语言中关于读取 yaml

发布于 1周前 作者 wuwangju 来自 Go语言

Golang Go语言中关于读取 yaml

本人初学者,想问下 go 读取 yaml 文件后能否像 python 一样直接按字典那样引用? 比如在 python 中,直接读入转换成字典后就可以 dict[‘global’][‘aa’] 引用

而 go 中,make 新建字典(map[string]interface{})后,只可以引用第一层,引用到第二层好像就变成字符串了 dict['global']可以,dict['global']['aa']就报错了。参考了下 prometheus 的代码,是要定义 struct 和 yaml 中的格式一模一样,觉得这样太麻烦了,所以想问下能否像 python 那样?


更多关于Golang Go语言中关于读取 yaml的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html

1 回复

更多关于Golang Go语言中关于读取 yaml的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


在Golang中读取YAML文件是一个常见的任务,特别是在配置管理和数据序列化方面。Go语言标准库并没有直接提供YAML的解析功能,但可以使用第三方库,如gopkg.in/yaml.v2,它非常流行且功能强大。

以下是一个基本的示例,展示如何使用yaml.v2库读取YAML文件:

  1. 安装yaml.v2库

    go get gopkg.in/yaml.v2
    
  2. 定义数据结构: 根据你的YAML文件内容,定义一个与之匹配的结构体。例如,如果你的YAML文件包含以下数据:

    server:
      port: 8080
      host: localhost
    

    则定义一个结构体:

    type Config struct {
        Server struct {
            Port int    `yaml:"port"`
            Host string `yaml:"host"`
        } `yaml:"server"`
    }
    
  3. 读取并解析YAML文件

    package main
    
    import (
        "fmt"
        "gopkg.in/yaml.v2"
        "io/ioutil"
        "log"
    )
    
    func main() {
        data, err := ioutil.ReadFile("config.yaml")
        if err != nil {
            log.Fatalf("error: %v", err)
        }
        var config Config
        err = yaml.Unmarshal(data, &config)
        if err != nil {
            log.Fatalf("error: %v", err)
        }
        fmt.Printf("Server Port: %d, Host: %s\n", config.Server.Port, config.Server.Host)
    }
    

这个示例展示了如何从YAML文件读取配置并解析到Go结构体中。记得根据你的实际YAML文件内容调整结构体定义。

回到顶部