ホームページ  >  記事  >  バックエンド開発  >  Golang テンプレートを使用して、switch ステートメントと ForEach ループを含む動的 bash スクリプトを生成するにはどうすればよいですか?

Golang テンプレートを使用して、switch ステートメントと ForEach ループを含む動的 bash スクリプトを生成するにはどうすればよいですか?

DDD
DDDオリジナル
2024-10-30 03:48:03604ブラウズ

How can Golang templates be used to generate dynamic bash scripts with switch statements and ForEach loops?

Switch および ForEach を使用した Golang テンプレート

動的コマンドを必要とする bash スクリプトを構築する場合、Golang テンプレートをスイッチおよび ForEach と組み合わせて利用できます。ループ。

依存関係構造

型情報を含む依存関係構造体を考えます:

type Dependency struct {
    Name    string
    Type    string
    CWD     string
    Install []Install
}

Bash Script Template

次に、bash スクリプトのテンプレートを作成します:

#!/bin/bash

{{range $d := .Dependency}}
echo "type is {{$d.Type}}"
echo "cwd is {{$d.CWD}}"
{{range $i := $d.Install}}
echo "install {{$i.name}}"
{{end}}
{{end}}

テンプレートの実行

テンプレートを使用してスクリプトを生成するには:

package main

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

// ... (rest of the code unchanged)

func main() {
    // ... (rest of the code unchanged)

    const t = `
#!/bin/bash

{{range .Dependency}}
echo "type is {{.Type}}"
echo "cwd is {{.CWD}}"
{{range .Install}}
echo "install {{.name}}"
{{end}}
{{end}}
`

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

出力

go run main.go を実行すると、目的の bash スクリプトが生成されます:

#!/bin/bash

echo "type is runner"
echo "cwd is /ui"
echo "install api"

echo "type is runner2"
echo "cwd is /ui2"
echo "install api2"

拡張機能

柔軟性を高めるには、インストール ステップを別のマップに保存し、依存関係の種類に基づいて補間することを検討してください。これにより、データの所有権が分離され、より動的なスクリプト生成が可能になります。

以上がGolang テンプレートを使用して、switch ステートメントと ForEach ループを含む動的 bash スクリプトを生成するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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