例如,我想在一个源文件中同时使用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}}`)
}
答案 0 :(得分:219)
import (
"text/template"
htemplate "html/template" // this is now imported as htemplate
)
详细了解in the spec。
答案 1 :(得分:6)
答案是正确的,但是需要一些解释。让我尝试回答。
它不起作用,因为:
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}}`)
}