Go Répondre à une demande HTTP à l'aide de modèles


Exemple

Les réponses peuvent être écrites sur un http.ResponseWriter utilisant des modèles dans Go. Cela s'avère être un outil pratique si vous souhaitez créer des pages dynamiques.

(Pour savoir comment fonctionnent les modèles dans Go, visitez la page Documentation des modèles de version .)

Continuez avec un exemple simple pour utiliser le html/template pour répondre à une requête HTTP:

package main

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

func main(){
    http.HandleFunc("/",WelcomeHandler)
    http.ListenAndServe(":8080",nil)
}

type User struct{
    Name string
    nationality string //unexported field.
}

func check(err error){
    if err != nil{
        log.Fatal(err)
    }
}

func WelcomeHandler(w http.ResponseWriter, r *http.Request){
    if r.Method == "GET"{
        t,err := template.ParseFiles("welcomeform.html")
        check(err)
        t.Execute(w,nil)
    }else{
        r.ParseForm()
        myUser := User{}
        myUser.Name = r.Form.Get("entered_name")
        myUser.nationality = r.Form.Get("entered_nationality")
        t, err := template.ParseFiles("welcomeresponse.html")
        check(err)
        t.Execute(w,myUser)
    }
}

Où, le contenu de

  1. welcomeform.html sont:
<head>
    <title> Help us greet you </title>
</head>
<body>
    <form method="POST" action="/">
        Enter Name: <input type="text" name="entered_name">
        Enter Nationality: <input type="text" name="entered_nationality">
        <input type="submit" value="Greet me!">
    </form>
</body>
  1. welcomeresponse.html sont:
<head>
    <title> Greetings, {{.Name}} </title>
</head>
<body>
    Greetings, {{.Name}}.<br>
    We know you are a {{.nationality}}!
</body>

Remarque:

  1. Assurez-vous que les fichiers .html sont dans le bon répertoire.

  2. Lorsque http://localhost:8080/ peut être visité après le démarrage du serveur.

  3. Comme on peut le voir après avoir soumis le formulaire, le champ de nationalité non exporté de la structure n'a pas pu être analysé par le package de modèle, comme prévu.