Как импортировать и использовать различные пакеты с одинаковым именем на языке Go?
например, я хочу использовать как Текст/шаблон, так и html/шаблон в одном исходном файле.
Но приведенный ниже код выдает ошибки.
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}}`)
}
2 ответов:
import ( "text/template" htemplate "html/template" // this is now imported as htemplate )подробнее о в спецификации.
ответ Мустафы верен, однако он требует некоторых объяснений. Позвольте мне попытаться ответить на него.
он не работает, потому что:
import "html/template" import "text/template"В этих строках вы пытаетесь импортировать два "шаблон" пакет с тем же именем.
импорт декларация
вы не можете объявить одно и то же имя (терминология: идентификатор) в том же масштаб.
В Go,
import- это объявление, и его область-это файл, который пытается импортировать эти пакеты.Это не работает по той же причине, что вы не можете объявить переменные с тем же именем в том же блоке.
вот почему это работает
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}}`) }
Comments