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