Как импортировать и использовать разные пакеты с одним и тем же именем на языке 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}}`)

}
107 голосов | спросил hardPass 2 Mayam12 2012, 10:18:42

2 ответа


0
import (
    "text/template"
    htemplate "html/template" // this is now imported as htemplate
)

Подробнее об этом см. в спецификации .

ответил Mostafa 2 Mayam12 2012, 10:24:50
0

Ответ Мостафы правильный, однако требует некоторого объяснения. Позвольте мне попытаться ответить на него.

Это не работает, потому что:

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}}`)
}

Вы можете проверить это на детской площадке .

ответил Inanc Gumus 3 J000000Tuesday18 2018, 22:01:41

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132