Golang で動的キーを使用して YAML を解析するにはどうすればよいですか?

Patricia Arquette
リリース: 2024-11-04 10:57:02
オリジナル
522 人が閲覧しました

How Can I Parse YAML with Dynamic Keys in Golang?

Golang での動的キーを使用した YAML の解析

動的に定義されたキーを含む YAML ファイルを操作する場合、Go の型システムには問題が発生する可能性があります。この記事では、目的の型構造を維持しながら、このような YAML を効果的に解析する方法について説明します。

YAML ファイルに可変キー (例: "V1"、"V2" など) が含まれる例に遭遇しました。これを環境タイプとして解析するという最初のアプローチは行き詰まり、カスタム ソリューションを探すことになりました。

解決策は、環境タイプにカスタム UnmarshalYAML メソッドを実装することにあります。このメソッドを使用すると、アンマーシャリング プロセスをインターセプトし、動的キーを処理できます。更新されたコード:

<code class="go">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
        // a MajorVersion
        if _, ok := err.(*yaml.TypeError); !ok {
            return err
        }
    }
    e.SkipHeaderValidation = params.SkipHeaderValidation
    e.Versions = versions
    return nil
}</code>
ログイン後にコピー

Versions プロパティの Map[string]MajorVersion を定義することで、動的なキー解析が有効になります。カスタム UnmarshalYAML メソッドは、YAML コンテンツに基づいてこのマップを動的に設定します。

ここで、YAML をアンマーシャリングすると、マップ[文字列]環境がルート タイプとして取得され、各環境には入力されたバージョン マップが含まれます。これにより、YAML で動的に定義されたキーを解析して表現するという課題が解決されます。

以上がGolang で動的キーを使用して YAML を解析するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!