Penjanaan Skrip Bash dengan Templat Golang, Suis dan ForEach
Cabaran
Matlamat adalah untuk mencipta skrip Bash daripada program Golang. Skrip harus berulang ke atas kebergantungan, mengenal pasti jenisnya menggunakan pernyataan suis dan menggemakan perintah yang berbeza berdasarkan jenis.
Pelaksanaan
Untuk mencapai ini, kita boleh menggunakan Templat Go, yang menyediakan cara yang mudah untuk menjana fail teks daripada data berstruktur. Berikut ialah penyelesaian menggunakan templat dengan suis dan ForEach:
<code class="go">package main import ( "log" "text/template" "gopkg.in/yaml.v2" "os" ) type File struct { TypeVersion string `yaml:"_type-version"` Dependency []Dependency `yaml:"dependency"` } type Dependency struct { Name string `yaml:"name"` Type string `yaml:"type"` CWD string `yaml:"cwd"` Install map[string]string `yaml:"install"` } var data = ` _type-version: "1.0.0" dependency: - name: ui type: runner cwd: /ui install: - name: api - name: ui2 type: runner2 cwd: /ui2 install: - name: 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}}" {{switch .Type}} case "runner": echo "running command for runner" case "runner2": echo "running command for runner2" default: echo "unknown type" {{end}} {{end}} ` tt := template.Must(template.New("").Parse(t)) err = tt.Execute(os.Stdout, f) if err != nil { log.Println("executing template:", err) } }</code>
Penjelasan
Output
Menjalankan atur cara di atas menghasilkan output berikut:
#!/bin/bash type is runner running command for runner type is runner2 running command for runner2
Atas ialah kandungan terperinci Bagaimanakah anda menjana skrip Bash dengan arahan khusus berdasarkan jenis kebergantungan menggunakan templat Golang, pernyataan suis dan gelung ForEach?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!