Heim > Artikel > Backend-Entwicklung > Wie können Golang-Vorlagen verwendet werden, um dynamische Bash-Skripte mit Switch-Anweisungen und ForEach-Schleifen zu generieren?
Golang-Vorlage mit Switch und ForEach
Beim Erstellen eines Bash-Skripts, das dynamische Befehle erfordert, kann man Golang-Vorlagen in Verbindung mit Switches und ForEach verwenden Schleifen.
Abhängigkeitsstruktur
Betrachten Sie eine Abhängigkeitsstruktur, die Typinformationen enthält:
type Dependency struct { Name string Type string CWD string Install []Install }
Bash-Skriptvorlage
Als nächstes erstellen Sie eine Vorlage für das Bash-Skript:
#!/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}}
Vorlagenausführung
So generieren Sie das Skript mithilfe der Vorlage:
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) } }
Ausgabe
Durch Ausführen von go run main.go wird das gewünschte Bash-Skript erstellt:
#!/bin/bash echo "type is runner" echo "cwd is /ui" echo "install api" echo "type is runner2" echo "cwd is /ui2" echo "install api2"
Verbesserungen
Für mehr Flexibilität sollten Sie erwägen, Installationsschritte in einer separaten Karte zu speichern und sie basierend auf dem Abhängigkeitstyp zu interpolieren. Dies trennt den Dateneigentum und ermöglicht eine dynamischere Skriptgenerierung.
Das obige ist der detaillierte Inhalt vonWie können Golang-Vorlagen verwendet werden, um dynamische Bash-Skripte mit Switch-Anweisungen und ForEach-Schleifen zu generieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!