ホームページ >バックエンド開発 >Golang >Switch および ForEach で Go テンプレートを使用して、依存関係タイプ固有のコマンドを含む Bash スクリプトを生成する方法

Switch および ForEach で Go テンプレートを使用して、依存関係タイプ固有のコマンドを含む Bash スクリプトを生成する方法

DDD
DDDオリジナル
2024-10-29 09:50:02327ブラウズ

How to Use Go Template with Switch and ForEach to Generate Bash Scripts with Dependency Type Specific Commands?

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

背景:

タスクは、 switchForEach の両方の構造を組み込んだ Go プログラムの bash.sh ファイル。生成されたスクリプトは、依存関係のリストを反復処理し、その型にアクセスし、その型を使用して特定のメッセージを出力する必要があります。

問題:

YAML マーシャリングとテンプレートの解析により、正しく機能しませんでした。この問題は、依存関係の種類がテンプレートで正しく使用されていないために発生しました。

解決策:

問題を解決するには、依存関係の構造が Install フィールドは、タイプごとに実行されるコマンドを表します。次に、Dependency 配列を反復処理し、range および switch コンストラクトを使用してタイプに基づいてコマンドを出力するテンプレートが作成されました。次のコード スニペットは、改訂されたアプローチを示しています:

出力:
<code class="go">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
    CWD     string
    Install map[string]string
}

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

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

`

func main() {
    f := File{}

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

   const t = `
#!/bin/bash

{{range .Dependency}}
echo "type is {{.Type}}"
echo "cwd is {{.CWD}}"
{{range $installName, $installCmd := .Install}}
echo "install {{$installName}} ({{$installCmd}})"
{{end}}
{{end}}
`

    tt := template.Must(template.New("").Parse(t))
    err = tt.Execute(os.Stdout, f)
    if err != nil {
        log.Println("executing template:", err)
    }
}</code>

更新されたコードにより、期待されるスクリプトが生成されます:

要約解決策には、テンプレートを正しく使用して依存関係データにアクセスし、

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

echo "type is runner"
echo "cwd is /ui"
echo "install api (echo api1)"
echo "type is runner2"
echo "cwd is /ui2"
echo "install api (echo api2)"</code>

ForEach を使用してタイプに基づいて適切なコマンドを生成することが含まれます。

以上がSwitch および ForEach で Go テンプレートを使用して、依存関係タイプ固有のコマンドを含む Bash スクリプトを生成する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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