Go テンプレート、Switch-Case ステートメント、YAML データを使用してカスタマイズされた Bash スクリプトを生成する方法

Barbara Streisand
リリース: 2024-10-29 04:18:29
オリジナル
180 人が閲覧しました

How to Generate a Customized Bash Script Using Go Templates, Switch-Case Statements, and YAML Data?

Switch と ForEach を使用した Golang テンプレート

問題: 依存関係のリストを反復処理し、依存関係をチェックする Golang プログラムから bash スクリプトを構築する

回答:

次の更新された Golang コードは、目的の動作を実現します:

<code class="go">package main

import (
    "log"
    "text/template"
    "gopkg.in/yaml.v2"
    "os"
)

type File struct {
    TypeVersion string `yaml:"_type-version"`
    Dependency []Dependency
}

type Dependency struct {
    Name    string
    Type    string
}

func main() {
    f := File{}

    err := yaml.Unmarshal([]byte(data), &f)
    if err != nil {
        log.Fatalf("error: %v", err)
    }

    const t = `
#!/bin/bash
{{range .Dependency}}
echo "type is {{.Type}}"
{{switch .Type}}
  case "runner1":
    echo "Submitting api1"
  case "runner2":
    echo "Submitting api2"
  default:
    echo "Unknown type"
{{end}}
{{end}}
`

    tt := template.Must(template.New("").Parse(t))
    err = tt.Execute(os.Stdout, f)
    if err != nil {
        log.Println("executing template:", err)
    }
}</code>
ログイン後にコピー

説明:

  • コードは、テキスト/テン​​プレートを使用して出力文字列をフォーマットします。
  • range キーワードは、Dependency 配列を反復処理します。
  • ループ内では、switch-case ブロックを使用して、依存関係の Type に基づいて出力をカスタマイズします。
  • case ステートメントは、特定の Type 値を処理し、必要なコマンドを出力します。
  • デフォルトのケースは、特に定義されていない型を処理します。

結果:

このコードによって生成される bash スクリプトの例は次のとおりです:

<code class="bash">#!/bin/bash

echo "type is runner"
Submitting api1


echo "type is runner2"
Submitting api2</code>
ログイン後にコピー

追加の考慮事項:

  • サンプル YAML データはデータ変数にハードコーディングされています。実際のシナリオでは、これはファイルまたはデータベースからロードできます。
  • API マッピング (タイプからコマンド) は、柔軟性を向上させるためにマップまたは別個の構成ファイルとして実装できます。
  • Dependency 構造体の cwd フィールドと Install フィールドは、デモには必要なかったため、このソリューションでは使用されません。

以上がGo テンプレート、Switch-Case ステートメント、YAML データを使用してカスタマイズされた Bash スクリプトを生成する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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