Maison >développement back-end >Golang >Comment utiliser le modèle Go avec Switch et ForEach pour générer des scripts Bash avec des commandes spécifiques au type de dépendance ?

Comment utiliser le modèle Go avec Switch et ForEach pour générer des scripts Bash avec des commandes spécifiques au type de dépendance ?

DDD
DDDoriginal
2024-10-29 09:50:02324parcourir

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

Modèle Golang avec Switch & ForEach

Contexte :

La tâche consiste à générer un Fichier bash.sh d'un programme Go qui intègre à la fois les constructions switch et ForEach. Le script généré doit parcourir une liste de dépendances, accéder à leurs types et utiliser les types pour imprimer des messages spécifiques.

Problème :

Une première tentative d'utilisation du marshaling YAML et l'analyse du modèle entraînait une fonctionnalité incorrecte. Le problème est survenu car le type de dépendance n'était pas correctement utilisé dans le modèle.

Solution :

Pour résoudre le problème, la structure des dépendances a été modifiée pour inclure un Install représentant les commandes à exécuter pour chaque type. Un modèle a ensuite été créé pour parcourir le tableau Dependency et imprimer les commandes en fonction du type à l'aide des constructions range et switch.

Le L'extrait de code suivant illustre l'approche révisée :

<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>

Sortie :

Le code mis à jour génère le script attendu :

<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>
En résumé , la solution consiste à utiliser correctement le modèle pour accéder aux données de dépendance et générer les commandes appropriées en fonction du type à l'aide de

switch et ForEach.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn