Gestion des cas spéciaux pour le dernier élément dans les modèles de texte Go
Dans le système de modèles de texte Go, créer des chaînes telles que "(p1, p2, p3)" à partir d'un tableau peut être difficile, en particulier lors du placement correct des virgules pour le dernier élément.
Tentative qui ne fonctionne pas
Une tentative qui ne parvient pas à supprimer la virgule de fin est :
import ( "text/template" "os" ) func main() { ip := []string{"p1", "p2", "p3"} temp := template.New("myTemplate") _, _ = temp.Parse(paramList) temp.Execute(os.Stdout, ip) } const paramList = "{{ $i := . }}({{ range $i }}{{ . }}, {{end}})"
Solution
Ce casse-tête peut être résolu en tirant parti de la syntaxe spéciale des instructions if du modèle. Contrairement aux instructions Go if, les modèles if peuvent tester les valeurs nulles. Cela permet l'astuce suivante :
import ( "text/template" "os" ) func main() { ip := []string{"p1", "p2", "p3"} temp := template.New("myTemplate") _, _ = temp.Parse(paramList) temp.Execute(os.Stdout, ip) } const paramList = "{{ $i := . }}({{ range $i }}{{ if $index }},{{end}}{{ . }}{{end}})"
La magie réside dans la ligne :
{{ if $index }},{{end}}
La variable $index est automatiquement affectée lors de l'itération de plage et est utilisée pour tester la dernier élément. Si l'index est différent de zéro (c'est-à-dire qu'il ne s'agit pas du dernier élément), une virgule est insérée. Cela garantit que le dernier élément n'a pas de virgule finale.
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!