为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
摇曳的蔷薇 2021-04-27 13:14:24
例如,我要在一个源文件中同时使用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}}`)}
查看完整描述

2 回答

?
一只萌萌小番薯

TA贡献1795条经验 获得超7个赞

import (

    "text/template"

    htemplate "html/template" // this is now imported as htemplate

)

在规范中阅读有关它的更多信息。


查看完整回答
反对 回复 2021-05-10
?
泛舟湖上清波郎朗

TA贡献1818条经验 获得超3个赞

Mostafa的回答是正确的,但是需要一些解释。让我尝试回答。


您的示例代码无法正常工作,因为您正试图导入两个具有相同名称的包,即“ template”。


import "html/template"  // imports the package as `template`

import "text/template"  // imports the package as `template` (again)

导入是一个声明语句:


您不能在同一范围内声明相同的名称(术语:标识符)。


在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包。


查看完整回答
反对 回复 2021-05-10
  • 2 回答
  • 0 关注
  • 258 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信