Golang-Vorlage mit Switch & ForEach
Hintergrund:
Die Aufgabe besteht darin, eine zu generieren bash.sh-Datei aus einem Go-Programm, die sowohl switch- als auch ForEach-Konstrukte enthält. Das generierte Skript sollte eine Liste von Abhängigkeiten durchlaufen, auf deren Typen zugreifen und die Typen zum Drucken bestimmter Nachrichten verwenden.
Problem:
Ein erster Versuch mit YAML-Marshalling und Das Parsen der Vorlage führte zu einer falschen Funktionalität. Das Problem trat auf, weil der Abhängigkeitstyp in der Vorlage nicht korrekt verwendet wurde.
Lösung:
Um das Problem zu beheben, wurde die Abhängigkeitsstruktur so geändert, dass sie ein Install-Feld, das die für jeden Typ auszuführenden Befehle darstellt. Anschließend wurde eine Vorlage erstellt, um das Array Dependency zu durchlaufen und die Befehle basierend auf dem Typ mithilfe der Konstrukte range und switch auszugeben.
Die Der folgende Codeausschnitt veranschaulicht den überarbeiteten Ansatz:<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), &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>
Ausgabe:
Der aktualisierte Code generiert das erwartete Skript:<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>
switch und ForEach zu generieren.
Das obige ist der detaillierte Inhalt vonWie verwende ich Go Template mit Switch und ForEach, um Bash-Skripte mit abhängigkeitstypspezifischen Befehlen zu generieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!