ホームページ  >  記事  >  バックエンド開発  >  Go テンプレート、Switch-Case ステートメント、YAML データを使用してカスタマイズされた Bash スクリプトを生成する方法

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

Barbara Streisand
Barbara Streisandオリジナル
2024-10-29 04:18:29232ブラウズ

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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。