go语言读取yaml配置文件内容

1、config.yaml配置文件内容假设如下
name: "example"
version: 1.0
settings:
  timeout: 30
  debug: true
  features:
    - feature1
    - feature2
2、定义结构体

go语言定义结构体匹配yaml内容

package main

import (
    "fmt"
    "log"
    "os"

    "gopkg.in/yaml.v2" // 或者 "github.com/go-yaml/yaml"
)

type Config struct {
    Name     string `yaml:"name"`
    Version  float64 `yaml:"version"`
    Settings struct {
        Timeout int      `yaml:"timeout"`
        Debug   bool     `yaml:"debug"`
        Features []string `yaml:"features"`
    } `yaml:"settings"`
}
3、读取并解析 YAML 文件

读取 config.yaml 文件,并将其解析为 Config 结构体

func loadConfig(filename string) (*Config, error) {
    // 读取文件内容
    data, err := os.ReadFile(filename)
    if err != nil {
        return nil, fmt.Errorf("failed to read file: %w", err)
    }

    // 解析 YAML 数据
    var config Config
    if err := yaml.Unmarshal(data, &config); err != nil {
        return nil, fmt.Errorf("failed to unmarshal YAML: %w", err)
    }

    return &config, nil
}

func main() {
    // 加载配置
    config, err := loadConfig("config.yaml")
    if err != nil {
        log.Fatalf("Error loading config: %v", err)
    }

    // 打印配置
    fmt.Printf("%+v\n", config)
}
4、整体示例代码
package main

import (
	"fmt"
	"log"
	"os"

	"github.com/go-yaml/yaml"
)

type Config struct {
	Name     string  `yaml:"name"`
	Version  float64 `yaml:"version"`
	Settings struct {
		Timeout  int      `yaml:"timeout"`
		Debug    bool     `yaml:"debug"`
		Features []string `yaml:"features"` // 确保这里是 []string
	} `yaml:"settings"`
}

func loadConfig(filename string) (*Config, error) {
	// 读取文件内容
	data, err := os.ReadFile(filename)
	if err != nil {
		return nil, fmt.Errorf("failed to read file: %w", err)
	}

	// 解析 YAML 数据
	var config Config
	if err := yaml.Unmarshal(data, &config); err != nil {
		return nil, fmt.Errorf("failed to unmarshal YAML: %w", err)
	}

	return &config, nil
}

func main() {
	// 加载配置
	config, err := loadConfig("config.yaml")
	if err != nil {
		log.Fatalf("Error loading config: %v", err)
	}

	// 打印配置
	fmt.Printf("%+v\n", config)
}

在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员buddha2080

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值