Например, я хочу использовать как текст / шаблон, так и 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}}`)
}
require
и ясностьюimport
формулировок, намного лучше, чем любые другие языки, которые я виделОтвет Мостафы правильный, но требует пояснений. Позвольте мне попытаться ответить на него.
Ваш пример кода не работает, потому что вы пытаетесь импортировать два пакета с одинаковым именем, а именно: «шаблон».
Импорт - это декларация:
Вы не можете объявить одно и то же имя ( терминология: идентификатор ) в одной и той же области.
В Go
import
это объявление, и его область действия - это файл, который пытается импортировать эти пакеты.Это не работает по той же причине, что вы не можете объявить переменные с одинаковыми именами в одном блоке.
Следующий код работает:
Приведенный выше код дает два разных имени импортированным пакетам с одинаковым именем. Итак, теперь есть два разных идентификатора, которые вы можете использовать:
t
дляtext/template
пакета иh
дляhtml/template
пакета.Вы можете проверить это на детской площадке .
источник