Travaillant principalement dans le milieu du web avec PHP, je me suis intéressé à la façon de gérer le templating avec Go. Cet article a pour but de vous montrez comment utiliser rapidement des templates pour générer un rendu au format HTML.

Pour l’exemple nous utiliserons 3 fichiers que vous placerez où bon vous semble. L’extension « tmpl » n’est pas une obligation et nous aurions pu choisir « html ».

  • main.go
  • tmpl/layout.tmpl
  • tmpl/content.tmpl
1. tmpl/layout.tmpl
{{define "layout"}}<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="utf-8">
        <title>{{.Title}}</title>
    </head>
    <body>
        <article id="content">
            {{template "content" .}}
        </article>
    </body>
</html>
{{end}}

Le « . » représentant le type « Page » défini dans le fichier main.go, aussi nous pouvons le passer comme argument à la template « content » pour lister les articles.

2. tmpl/content.tmpl
{{define "content"}}
    {{range .Articles}}
        <p>{{.}}</p>
    {{end}}
{{end}}

Ce fichier contient une simple boucle sur la liste des articles de la page. Le {{.}} représente la valeur de l’article à chaque itération.

3. main.go
package main

import (
    "html/template"
    "log"
    "net/http"
)

type Page struct {
    Title    string
    Articles []string
}

func viewHandler(w http.ResponseWriter, r *http.Request) {
    // Création d'une page
    p := Page{"Titre de ma page", []string{"Item 1", "Item 2", "Item 3"}}

    // Création d'une nouvelle instance de template
    t := template.New("Label de ma template")

    // Déclaration des fichiers à parser
    t = template.Must(t.ParseFiles("tmpl/layout.tmpl", "tmpl/content.tmpl"))

    // Exécution de la fusion et injection dans le flux de sortie
    // La variable p sera réprésentée par le "." dans le layout
    // Exemple {{.}} == p
    err := t.ExecuteTemplate(w, "layout", p)

    if err != nil {
        log.Fatalf("Template execution: %s", err)
    }
}

func main() {
    http.HandleFunc("/", viewHandler)
    http.ListenAndServe(":3000", nil)
}

Enfin pour testez se code, lancez la commande

# Lancement de l'application
$ go run main.go

# Ctrl+c pour stopper le serveur

Ouvrez vôtre navigateur favori et entrez l’url http://localhost:3000/

 

Il n'y a pas de commentaires.