Golang Template with Switch & ForEach
When constructing a bash script requiring dynamic commands, one can utilize Golang templates in conjunction with switches and ForEach loops.
Dependency Structure
Consider a dependency struct containing type information:
type Dependency struct { Name string Type string CWD string Install []Install }
Bash Script Template
Next, create a template for the bash script:
#!/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}}
Template Execution
To generate the script using the template:
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) } }
Output
Running go run main.go will produce the desired bash script:
#!/bin/bash echo "type is runner" echo "cwd is /ui" echo "install api" echo "type is runner2" echo "cwd is /ui2" echo "install api2"
Enhancements
For more flexibility, consider storing install steps in a separate map and interpolating them based on dependency type. This separates data ownership and allows for more dynamic script generation.
The above is the detailed content of How can Golang templates be used to generate dynamic bash scripts with switch statements and ForEach loops?. For more information, please follow other related articles on the PHP Chinese website!