예를 들어 하나의 소스 파일에 text / template과 html / template을 모두 사용하고 싶습니다. 그러나 아래 코드는 오류를 발생시킵니다.
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}}`)
}
답변
import (
"text/template"
htemplate "html/template" // this is now imported as htemplate
)
사양에서 이에 대해 자세히 알아보십시오 .
답변
Mostafa의 답변은 정확하지만 약간의 설명이 필요합니다. 대답하려고 노력하겠습니다.
이름이 같은 두 개의 패키지 ( “template”)를 가져 오려고하므로 예제 코드가 작동하지 않습니다.
import "html/template" // imports the package as `template`
import "text/template" // imports the package as `template` (again)
가져 오기는 선언문입니다.
-
동일한 범위에서 동일한 이름 ( 용어 : identifier )을 선언 할 수 없습니다 .
-
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
패키지.