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

}
596   2  

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

    Ничего не найдено.