Go で YAML ファイルを操作する場合、ファイル内のキー名が異なるシナリオが発生する可能性があります。これは、API のバージョン管理や動的構成の目的でよく使用されます。このような YAML 構造を効果的に解析するには、カスタム解析戦略を採用する必要があります。
API のバージョン管理のコンテキストでは、異なるバージョンを表すキーを含む YAML ファイルを使用することができます。 、「V1」、「V2」、「V3」など。問題は、これらのバージョンがファイル内に常に存在するとは限らず、順序が一貫していない可能性があることです。
この問題を解決するには、対応するバージョンにカスタム アンマーシャラーを実装することを検討してください。データ構造。これにより、アンマーシャリング プロセスを制御し、動的なキー値を処理できるようになります。
<code class="go">package main import ( "fmt" "gopkg.in/yaml.v2" ) type MajorVersion struct { Current string `yaml:"current"` MimeTypes []string `yaml:"mime_types"` SkipVersionValidation bool `yaml:"skip-version-validation"` SkipMimeTypeValidation bool `yaml:"skip-mime-type-validation"` } type Environment struct { SkipHeaderValidation bool Versions map[string]MajorVersion } func (e *Environment) UnmarshalYAML(unmarshal func(interface{}) error) error { var params struct { SkipHeaderValidation bool `yaml:"skip-header-validation"` } if err := unmarshal(&params); err != nil { return err } var versions map[string]MajorVersion if err := unmarshal(&versions); err != nil { // Here we expect an error because a boolean cannot be converted to a MajorVersion if _, ok := err.(*yaml.TypeError); !ok { return err } } e.SkipHeaderValidation = params.SkipHeaderValidation e.Versions = versions return nil } func main() { var e map[string]Environment if err := yaml.Unmarshal([]byte(data), &e); err != nil { fmt.Println(err.Error()) } fmt.Printf("%#v\n", e) }</code>
Environment 構造体にカスタム Unmarshaler を定義することで、YAML ファイル内のブール構造とネストされた構造の両方を効果的に処理できます。
カスタム アンマーシャラーは、Golang で複雑で動的な YAML 構造を解析する強力な方法を提供します。カスタマイズされたアンマーシャリング ロジックを実装することで、データ構造をさまざまなキー形式に適応させることができ、時間の経過とともに構造が変化する可能性がある状況でも YAML ファイルの操作が容易になります。
以上がGo で YAML の動的キーを解析するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。