[Golang] YAML 파싱하기

반응형

Go언어에서 YAML 라이브러리를 이용하면 간편하게 YMAL 값을 다룰 수 있다. 

해당 라이브러리의 문서는 아래에서 확인할 수 있다.

 

간단하게 YAML를 언마샬링 하는 예제를 확인해보자.

- person.yaml

name: Martin D'vloper
job: Developer
skill: Elite
employed: True
foods:
  - Apple
  - Orange
  - Strawberry
  - Mango
languages:
  perl: Elite
  python: Elite

 

 

 

이전에 학습했듯이 json를 다루는 방식과 거의 동일하다.

- [go] JSON 다루기

 

필드 태그 형식은 다음과 같다.

yaml:"[<key>][,<flag1>[,<flag2>]]"

 

package main

import (
	"fmt"
	"log"
	"io/ioutil"

	"gopkg.in/yaml.v3"
)

type Person struct {
	Name      string    `yaml:"name"`
	Job       string    `yaml:"job"`
	Skill     string    `yaml:"skill"`
	Employed  bool      `yaml:"employed"`
	Foods     []string  `yaml:"foods"`
	Languages Languages `yaml:"languages"`
}

type Languages struct {
	Perl   string `yaml:"perl"`
	Python string `yaml:"python"`
}

func getPerson(fileName string) (*Person, error) {

	buf, err := ioutil.ReadFile(fileName)
	if err != nil {
		return nil, err
	}

	p := &Person{}
	err = yaml.Unmarshal(buf, p)
	if err != nil {
		log.Fatalf("Unmarshal: %v", err)
	}

	return p, nil
}

func main() {
	fmt.Println("Parsing YAML file")

	p, err := getPerson("person.yaml")
	if err != nil {
		log.Fatal(err)
	}
	fmt.Printf("%+v\n", p)
}

 

YAML 를 Go type으로 변환해주는 사이트가 있다. 참고하자.