Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimanakah anda menjana skrip Bash dengan arahan khusus berdasarkan jenis kebergantungan menggunakan templat Golang, pernyataan suis dan gelung ForEach?

Bagaimanakah anda menjana skrip Bash dengan arahan khusus berdasarkan jenis kebergantungan menggunakan templat Golang, pernyataan suis dan gelung ForEach?

Susan Sarandon
Susan Sarandonasal
2024-10-28 18:08:29442semak imbas

How do you generate a Bash script with specific commands based on dependency types using Golang template, switch statement, and ForEach loop?

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

  1. Kami menggunakan fail YAML (data) untuk menentukan kebergantungan dan jenisnya .
  2. Kami menghuraikan fail YAML ke dalam struct Fail menggunakan yaml.Unmarshal.
  3. Kami mentakrifkan templat (t) menggunakan teks/templat. Templat termasuk gelung ForEach untuk lelaran ke atas kebergantungan dan pernyataan suis untuk mengendalikan jenis yang berbeza.
  4. Kami menghuraikan templat menggunakan templat. Menghuraikan dan melaksanakannya menggunakan Laksanakan dengan struct Fail sebagai input.
  5. Ini menjana skrip Bash dengan arahan yang dikehendaki berdasarkan jenis kebergantungan.

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!

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