Rumah >pembangunan bahagian belakang >Golang >Bagaimana Menggunakan Templat Go dengan Suis dan ForEach untuk Menjana Skrip Bash dengan Perintah Khusus Jenis Ketergantungan?

Bagaimana Menggunakan Templat Go dengan Suis dan ForEach untuk Menjana Skrip Bash dengan Perintah Khusus Jenis Ketergantungan?

DDD
DDDasal
2024-10-29 09:50:02323semak imbas

How to Use Go Template with Switch and ForEach to Generate Bash Scripts with Dependency Type Specific Commands?

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), &amp;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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn