go不能在模板的参数中使用输出(类型字符串)作为类型io.Writer执行

时间:2016-05-09 20:32:12

标签: go

在'go'到 os.Stdout 中执行模板(在我的情况下是'tmplhtml')很容易但是如何将它写入字符串'output'以便稍后我可以发送html in邮件使用"gopkg.in/gomail.v2"

var output string
    t := template.Must(template.New("html table").Parse(tmplhtml))
    err = t.Execute(output, Files)
m.SetBody("text/html", output) //"gopkg.in/gomail.v2"

构建错误读取'不能使用输出(类型字符串)作为参数t的类型io.Writer.Execute:string不实现io.Writer(缺少Write方法)'我可以实现Writer方法,但它应该返回整数写(p []字节)(n int,错误错误)

2 个答案:

答案 0 :(得分:5)

您需要按如下方式写入缓冲区,因为这会实现接口io.Writer。它基本上缺少一个Write方法,你可以自己构建它,但缓冲区更直接:

buf := new(bytes.Buffer)
t := template.Must(template.New("html table").Parse(tmplhtml))
err = t.Execute(buf, Files)

答案 1 :(得分:0)

您也可以使用strings.Builder

package main

import (
   "strings"
   "text/template"
)

func main() {
   t, err := new(template.Template).Parse("hello {{.}}")
   if err != nil {
      panic(err)
   }
   b := new(strings.Builder)
   t.Execute(b, "world")
   println(b.String())
}