Home

Parsing YAML in Go with `gopkg.in/yaml.v2` Package Example

186 views

In Go, you can use the gopkg.in/yaml.v2 package to parse YAML data into Go structs. Below is a comprehensive example that demonstrates how to achieve this.

1. Install the yaml.v2 package

First, you'll need to install the yaml.v2 package using the following command:

go get gopkg.in/yaml.v2

2. Define your struct

Create a Go struct that matches the structure of your YAML data.

3. Write the code to parse the YAML

Below is a complete example:

package main

import (
	"fmt"
	"gopkg.in/yaml.v2"
)

// Define a struct that matches the structure of your YAML data
type Config struct {
	AppName string `yaml:"app_name"`
	Version string `yaml:"version"`
	DB      struct {
		Host     string `yaml:"host"`
		Port     int    `yaml:"port"`
		Username string `yaml:"username"`
		Password string `yaml:"password"`
		Name     string `yaml:"name"`
	} `yaml:"db"`
}

func main() {
	// Sample YAML data
	yamlData := `
app_name: MyApp
version: 1.0.0
db:
  host: localhost
  port: 5432
  username: myuser
  password: mypass
  name: mydb
`

	// Create an instance of the Config struct
	var config Config

	// Unmarshal the YAML data into the Config struct
	err := yaml.Unmarshal([]byte(yamlData), &config)
	if err != nil {
		fmt.Printf("Error parsing YAML: %s\n", err)
		return
	}

	// Print the parsed data
	fmt.Printf("App Name: %s\n", config.AppName)
	fmt.Printf("Version: %s\n", config.Version)
	fmt.Printf("Database Host: %s\n", config.DB.Host)
	fmt.Printf("Database Port: %d\n", config.DB.Port)
	fmt.Printf("Database Username: %s\n", config.DB.Username)
	fmt.Printf("Database Password: %s\n", config.DB.Password)
	fmt.Printf("Database Name: %s\n", config.DB.Name)
}

Explanation

  1. Struct Definition: The Config struct is defined to match the structure of the YAML data. Note the use of struct tags (yaml:"...") to map YAML keys to struct fields.

  2. YAML Data: A sample YAML string is defined in the yamlData variable.

  3. Unmarshalling: The yaml.Unmarshal function is used to parse the YAML data into the config struct. If there are any errors during parsing, they are handled appropriately.

  4. Output: The parsed data is printed out to verify the result.

Running the Code

To run the code, simply copy and paste it into a Go file (e.g., main.go) and execute the following commands:

go run main.go

This will output the parsed YAML data confirming that the struct fields have been populated correctly.

By using the yaml.v2 package, you can easily handle YAML data in your Go applications, enabling you to manage configurations and other structured data more effectively.