go - 模板 : is an incomplete or empty template

标签 go go-templates gomail

我有以下一段代码,我尝试使用gopkg.in/gomail.v2发送电子邮件。当电子邮件模板像这样放置在项目的根目录中时,我完全能够发送电子邮件

./
    main.go
    template.html


// Info defines
type Info struct {
    Age  int
    Name string
}

func (i Info) sendMail() {
    fp := filepath.Join("template.html")

    t := template.New(fp)

    var err error
    t, err = t.ParseFiles(fp)
    if err != nil {
        log.Println(err)
    }

    var tpl bytes.Buffer
    if err := t.Execute(&tpl, i); err != nil {
        log.Println(err)
    }

    result := tpl.String()
    // ... email sending logic
}

func main() {
    info := &Info{
        Name: "name 1",
        Age:  20,
    }

    info.sendMail()
}

但是当我将模板目录更改为 emails/template.html 并将文件路径更改为
fp := filepath.Join("emails", "template.html")
然后我从 t.Execute()
得到错误 模板:“emails/template.html”是不完整或空的模板

我也尝试过 fp, _ := filepath.Abs​​("emails/template.html") 但出现错误

模板:“/mnt/data/go/test/emails/template.html”是不完整或空模板 提到的路径是正确的。

最佳答案

我变了

if err := t.Execute(&tpl, i); err != nil {
        log.Println(err)
    }


if err := t2.ExecuteTemplate(&tpl, "template.html", i); err != nil {
        log.Println(err)
    }

成功了

如果我想使用t.Execute(&tpl, i),那么我必须在创建模板时将模板名称指定为文件名

t := template.New("template.html")

关于go - 模板 : is an incomplete or empty template,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60945786/

相关文章:

go - 如何在Go中获取socket.io握手查询

GoLang CGO 文件句柄

Golang 从包含的模板访问模板变量

http - 如何使用 Go http 包提供共享结构?

Golang 多个收件人与 gomail.v2

go - 在检查if-else条件时 undefined variable 名

json - 被 gin c.BindJSON 捕获时如何断言错误类型 json.UnmarshalTypeError

go-templates - 如何根据表达式有条件地在 Go 模板中设置变量,如果不使用 if 语句包装可能会导致错误

go - 在 gomail v2 中发送带有可选附件的电子邮件