Par exemple, je souhaite utiliser à la fois texte / modèle et html / modèle dans un fichier source. Mais le code ci-dessous génère 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}}`)
}
require
et lesimport
déclarations, tellement mieux que toutes les autres langues que j'ai vuesLa réponse de Mostafa est correcte, mais elle demande quelques explications. Laissez-moi essayer d'y répondre.
Votre exemple de code ne fonctionne pas car vous essayez d'importer deux packages avec le même nom, qui est: "template".
L'importation est une déclaration de déclaration:
Vous ne pouvez pas déclarer le même nom ( terminologie: identifiant ) dans la même portée.
Dans Go, il
import
y a 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 de variables avec le même nom dans le même bloc.
Le code suivant fonctionne:
Le code ci-dessus donne deux noms différents aux packages importés avec le même nom. Il existe donc maintenant deux identifiants différents que vous pouvez utiliser:
t
pour letext/template
package eth
pour lehtml/template
package.Vous pouvez le vérifier sur le terrain de jeu .
la source