如何导入和使用同名的不同软件包

例如,我要在一个源文件中同时使用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}}`)


}


摇曳的蔷薇
浏览 259回答 2
2回答

一只萌萌小番薯

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)导入是一个声明语句:您不能在同一范围内声明相同的名称(术语:标识符)。在Go中,import是一个声明,其范围是试图导入这些包的文件。由于相同的原因,您不能在同一块中声明具有相同名称的变量,因此它不起作用。以下代码有效:package mainimport (    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包。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go