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