Par exemple, je souhaite utiliser à la fois text/template et html/template dans un fichier source. Mais le code ci-dessous jette des erreurs.
import (
"fmt"
"net/http"
"text/template" // template redeclared as imported package name
"html/template" // template redeclared as imported package name
)
func handler_html(w http.ResponseWriter, r *http.Request) {
t_html, err := html.template.New("foo").Parse(`{{define "T"}}Hello, {{.}}!{{end}}`)
t_text, err := text.template.New("foo").Parse(`{{define "T"}}Hello, {{.}}!{{end}}`)
}
import (
"text/template"
htemplate "html/template" // this is now imported as htemplate
)
En savoir plus à ce sujet dans la spécification .
La réponse de Mostafa est correcte, mais nécessite quelques explications. Laissez-moi essayer d'y répondre.
Cela ne fonctionne pas car:
import "html/template"
import "text/template"
Dans ces lignes, vous essayez d'importer deux "modèles" packages avec le même nom.
Importer est une déclaration
Vous ne pouvez pas déclarer le même nom ( terminology: identifier) dans la même portée.
Dans Go, import
est une déclaration et sa portée est le fichier qui tente d'importer ces packages.
Cela ne fonctionne pas pour la même raison que vous ne pouvez pas déclarer des variables du même nom dans le même bloc.
C'est la raison pour laquelle cela fonctionne
package main
import (
t "text/template"
h "html/template"
)
func main() {
t.New("foo").Parse(`{{define "T"}}Hello, {{.}}!{{end}}`)
h.New("foo").Parse(`{{define "T"}}Hello, {{.}}!{{end}}`)
}