Rumah >pembangunan bahagian belakang >Golang >Bagaimana Menggunakan Templat Go dengan Suis dan ForEach untuk Menjana Skrip Bash dengan Perintah Khusus Jenis Ketergantungan?
Templat Golang dengan Suis & ForEach
Latar Belakang:
Tugasnya adalah untuk menjana Fail bash.sh daripada program Go yang menggabungkan binaan suis dan ForEach. Skrip yang dijana harus berulang melalui senarai kebergantungan, mengakses jenisnya dan menggunakan jenis untuk mencetak mesej tertentu.
Masalah:
Percubaan awal menggunakan YAML marshaling dan penghuraian templat mengakibatkan kefungsian yang salah. Isu timbul kerana jenis kebergantungan tidak digunakan dengan betul dalam templat.
Penyelesaian:
Untuk menyelesaikan masalah, struktur kebergantungan telah diubah suai untuk memasukkan Pasang medan yang mewakili arahan yang akan dilaksanakan untuk setiap jenis. Templat kemudiannya dicipta untuk mengulangi tatasusunan Dependency dan mencetak arahan berdasarkan jenis menggunakan binaan julat dan suis.
coretan kod berikut menggambarkan pendekatan yang disemak:
<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>
Output:
Kod yang dikemas kini menjana skrip yang dijangkakan:
<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>
Ringkasnya , penyelesaiannya melibatkan penggunaan templat dengan betul untuk mengakses data kebergantungan dan menjana arahan yang sesuai berdasarkan jenis menggunakan suis dan ForEach.
Atas ialah kandungan terperinci Bagaimana Menggunakan Templat Go dengan Suis dan ForEach untuk Menjana Skrip Bash dengan Perintah Khusus Jenis Ketergantungan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!