Go에서 YAML 작업하기
Grace Collins
Solutions Engineer · Leapcell

Key Takeaways
- Go는 YAML 구문 분석 및 생성을 위해
go-yaml/yaml
및goccy/go-yaml
과 같은 여러 라이브러리를 제공합니다. - YAML은 Go 구조체로 언마샬링될 수 있으며 다시 YAML 형식으로 마샬링될 수 있습니다.
- 올바른 YAML 라이브러리 선택은 기능 지원 및 성능 요구 사항에 따라 달라집니다.
YAML(YAML Ain't Markup Language)은 사람이 읽을 수 있는 데이터 직렬화 표준으로, 구성 파일 및 서로 다른 데이터 구조를 가진 언어 간의 데이터 교환에 일반적으로 사용됩니다. Go 프로그래밍 언어에는 YAML 콘텐츠를 구문 분석하고 생성하는 데 사용할 수 있는 여러 라이브러리가 있습니다. 이 기사에서는 주요 라이브러리를 살펴보고 Go에서 YAML을 사용하는 방법을 보여줍니다.
Go의 YAML 라이브러리
go-yaml/yaml
go-yaml/yaml
패키지는 Go에서 YAML을 처리하는 데 가장 널리 사용되는 라이브러리 중 하나입니다. libyaml C 라이브러리의 순수 Go 포트로 개발되었으며 Go 프로그램이 YAML 값을 편안하게 인코딩하고 디코딩할 수 있도록 합니다. 이 패키지는 YAML 1.2의 대부분을 지원하고 이전 버전과의 호환성을 위해 YAML 1.1의 일부 동작을 유지합니다. [출처: https://github.com/go-yaml/yaml]
패키지를 설치하려면 다음을 실행합니다.
go get gopkg.in/yaml.v3
goccy/go-yaml
go-yaml/yaml
의 대안은 goccy/go-yaml
라이브러리입니다. go-yaml/yaml
을 대체하기 위해 처음부터 개발된 이 라이브러리는 유지 관리 문제 및 구문 분석 기능과 같은 이전 라이브러리의 일부 제한 사항을 해결합니다. 더 나은 구문 분석, YAML 앵커 및 별칭 지원, 사용자 정의 가능한 마샬/언마샬 동작과 같은 기능을 제공합니다. [출처: https://github.com/goccy/go-yaml]
이 패키지를 설치하려면 다음을 실행합니다.
go get github.com/goccy/go-yaml
Go에서 YAML 구문 분석
Go에서 YAML 파일을 구문 분석하려면 YAML 콘텐츠의 구조를 반영하는 구조체를 정의하고 Unmarshal
함수를 사용하여 YAML 데이터를 구조체로 디코딩할 수 있습니다.
다음은 예시입니다.
package main import ( "fmt" "log" "gopkg.in/yaml.v3" ) var data = ` a: Easy! b: c: 2 d: [3, 4] ` type T struct { A string B struct { RenamedC int `yaml:"c"` D []int `yaml:",flow"` } } func main() { t := T{} err := yaml.Unmarshal([]byte(data), &t) if err != nil { log.Fatalf("error: %v", err) } fmt.Printf("--- t:\n%v\n\n", t) }
이 예에서는 YAML 콘텐츠가 구조체 T
로 언마샬링되고 값이 그에 따라 인쇄됩니다. [출처: https://pkg.go.dev/gopkg.in/yaml.v3]
Go에서 YAML 생성
Go 데이터 구조에서 YAML을 생성하려면 YAML 라이브러리에서 제공하는 Marshal
함수를 사용할 수 있습니다. 방법은 다음과 같습니다.
package main import ( "fmt" "log" "gopkg.in/yaml.v3" ) type T struct { A string B struct { RenamedC int `yaml:"c"` D []int `yaml:",flow"` } } func main() { t := T{ A: "Easy!", B: struct { RenamedC int `yaml:"c"` D []int `yaml:",flow"` }{ RenamedC: 2, D: []int{3, 4}, }, } d, err := yaml.Marshal(&t) if err != nil { log.Fatalf("error: %v", err) } fmt.Printf("--- t dump:\n%s\n\n", string(d)) }
이 코드는 구조체 T
를 정의하고 데이터를 채운 다음 YAML 형식으로 마샬링합니다. 결과 YAML 콘텐츠가 인쇄됩니다. [출처: https://pkg.go.dev/gopkg.in/yaml.v3]
결론
go-yaml/yaml
및 goccy/go-yaml
과 같은 강력한 라이브러리 덕분에 Go에서 YAML을 사용하는 것은 간단합니다. 프로젝트 요구 사항에 따라 필요에 가장 적합한 라이브러리를 선택할 수 있습니다. YAML을 구문 분석하고 생성하는 방법을 이해하면 구성 파일을 효과적으로 관리하고 Go 애플리케이션에서 데이터 교환을 촉진할 수 있습니다.
FAQs
go-yaml/yaml
이 널리 사용되지만 goccy/go-yaml
은 대체 기능과 성능 향상을 제공합니다.
YAML 라이브러리의 Unmarshal
함수를 사용하여 YAML을 Go 구조체 필드로 디코딩합니다.
예, Marshal
함수를 사용하여 Go 구조체를 YAML로 직렬화할 수 있습니다.
Leapcell은 Go 프로젝트 호스팅을 위한 최고의 선택입니다.
Leapcell은 웹 호스팅, 비동기 작업 및 Redis를 위한 차세대 서버리스 플랫폼입니다.
다국어 지원
- Node.js, Python, Go 또는 Rust로 개발합니다.
무료로 무제한 프로젝트 배포
- 사용량에 대해서만 비용을 지불합니다. 요청이나 요금이 없습니다.
탁월한 비용 효율성
- 유휴 요금 없이 사용한 만큼만 지불합니다.
- 예: $25는 평균 응답 시간 60ms에서 694만 건의 요청을 지원합니다.
간소화된 개발자 경험
- 손쉬운 설정을 위한 직관적인 UI.
- 완전 자동화된 CI/CD 파이프라인 및 GitOps 통합.
- 실행 가능한 통찰력을 위한 실시간 메트릭 및 로깅.
손쉬운 확장성 및 고성능
- 고도의 동시성을 쉽게 처리할 수 있도록 자동 확장됩니다.
- 운영 오버헤드가 없으므로 구축에만 집중하면 됩니다.
설명서에서 자세히 알아보세요!
X에서 팔로우하세요: @LeapcellHQ