Zum Beispiel möchte ich sowohl Text / Vorlage als auch HTML / Vorlage in einer Quelldatei verwenden. Aber der Code unten wirft Fehler.
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
undimport
Aussage genagelt , einfach so viel besser als alle anderen Sprachen, die ich gesehen habeDie Antwort von Mostafa ist richtig, erfordert jedoch eine Erklärung. Lassen Sie mich versuchen, es zu beantworten.
Ihr Beispielcode funktioniert nicht, weil Sie versuchen, zwei Pakete mit demselben Namen zu importieren: "Vorlage".
Der Import ist eine Deklarationserklärung:
Sie können nicht denselben Namen ( Terminologie: Bezeichner ) im selben Bereich deklarieren .
In Go
import
ist eine Deklaration und ihr Gültigkeitsbereich ist die Datei, die versucht, diese Pakete zu importieren.Dies funktioniert aus demselben Grund nicht, aus dem Sie keine Variablen mit demselben Namen im selben Block deklarieren können.
Der folgende Code funktioniert:
Der obige Code gibt den importierten Paketen mit demselben Namen zwei verschiedene Namen. Es gibt also zwei verschiedene Bezeichner, die Sie verwenden können:
t
für dastext/template
Paket undh
für dashtml/template
Paket.Sie können es auf dem Spielplatz überprüfen .
quelle