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