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を処理するための最も広く使用されているライブラリの1つです。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の操作は、go-yaml/yaml
やgoccy/go-yaml
などの堅牢なライブラリのおかげで簡単です。プロジェクトの要件に応じて、ニーズに最適なライブラリを選択できます。YAMLの解析方法と生成方法を理解することで、構成ファイルを効果的に管理し、Goアプリケーションでのデータ交換を促進できます。
FAQs
go-yaml/yaml
が広く使用されていますが、goccy/go-yaml
は代替機能とパフォーマンスの向上を提供します。
YAMLライブラリのUnmarshal
関数を使用して、YAMLをGoの構造体フィールドにデコードします。
はい、Marshal
関数を使用すると、Goの構造体をYAMLにシリアル化できます。
We are Leapcell, your top choice for hosting Go projects.
Leapcell は、Web ホスティング、非同期タスク、Redis 向けの次世代サーバーレスプラットフォームです。
多言語サポート
- Node.js、Python、Go、または Rust で開発します。
無制限のプロジェクトを無料で デプロイ
- 使用量に対してのみ料金が発生します。リクエストも料金もかかりません。
比類なきコスト効率
- アイドル料金なしの従量課金制。
- 例: 25 ドルで 694 万件のリクエストを平均応答時間 60 ミリ秒でサポートします。
合理化された開発者エクスペリエンス
- 簡単なセットアップのための直感的な UI。
- 完全に自動化された CI/CD パイプラインと GitOps の統合。
- 実用的な洞察のためのリアルタイムのメトリクスとログ。
簡単なスケーラビリティとハイパフォーマンス
- 高い同時実行性を容易に処理するための自動スケーリング。
- 運用上のオーバーヘッドはゼロ。構築に集中するだけです。
詳細については、ドキュメントをご覧ください。
X: @LeapcellHQ でフォローしてください。