ホームページ  >  記事  >  バックエンド開発  >  Golang テンプレート、switch ステートメント、ForEach ループを使用して、依存関係の種類に基づいた特定のコマンドを含む Bash スクリプトを生成するにはどうすればよいでしょうか?

Golang テンプレート、switch ステートメント、ForEach ループを使用して、依存関係の種類に基づいた特定のコマンドを含む Bash スクリプトを生成するにはどうすればよいでしょうか?

Susan Sarandon
Susan Sarandonオリジナル
2024-10-28 18:08:29506ブラウズ

How do you generate a Bash script with specific commands based on dependency types using Golang template, switch statement, and ForEach loop?

Golang テンプレート、Switch、ForEach を使用した Bash スクリプトの生成

チャレンジ

目標Golang プログラムから Bash スクリプトを作成することです。スクリプトは依存関係を反復し、switch ステートメントを使用して依存関係のタイプを識別し、タイプに基づいてさまざまなコマンドをエコーする必要があります。

実装

これを実現するには、次を使用します。 Go テンプレート。構造化データからテキスト ファイルを生成する便利な方法を提供します。スイッチと ForEach を使用したテンプレートを使用したソリューションは次のとおりです。

<code class="go">package main

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

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

type Dependency struct {
    Name    string            `yaml:"name"`
    Type    string            `yaml:"type"`
    CWD     string            `yaml:"cwd"`
    Install map[string]string `yaml:"install"`
}

var data = `
_type-version: "1.0.0"
dependency:
  - name: ui
    type: runner
    cwd: /ui
    install:
       - name: api

  - name: ui2
    type: runner2
    cwd: /ui2
    install:
       - name: api2

`

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 "runner":
        echo "running command for runner"
    case "runner2":
        echo "running command for runner2"
    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>

説明

  1. 依存関係とそのタイプを定義するために YAML ファイル (データ) を使用します。 .
  2. yaml.Unmarshal を使用して YAML ファイルを File 構造体に解析します。
  3. text/template を使用してテンプレート (t) を定義します。テンプレートには、依存関係を反復する ForEach ループと、さまざまな型を処理する switch ステートメントが含まれています。
  4. template.Parse を使用してテンプレートを解析し、File 構造体を入力として Execute を使用して実行します。
  5. これにより、依存関係の種類に基づいて必要なコマンドを含む Bash スクリプトが生成されます。

出力

上記のプログラムを実行すると、次の出力が生成されます:

#!/bin/bash

type is runner
running command for runner
type is runner2
running command for runner2

以上がGolang テンプレート、switch ステートメント、ForEach ループを使用して、依存関係の種類に基づいた特定のコマンドを含む Bash スクリプトを生成するにはどうすればよいでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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