如何在Go中为String创建一个writer

Nec*_*eif 4 go

我需要使用*template.Execute方法,但我希望结果为字符串或byte [],以便我可以将它传递给另一个*template.Execute但该方法将其结果写入writer.有没有办法创建一个写入我定义的变量的编写器?

小智 7

您还可以用于strings.Builder此目的:

package main

import (
   "html/template"
   "strings"
)

func main() {
   t, e := template.New("date").Parse("<p>{{ .month }} - {{ .day }}</p>")
   if e != nil {
      panic(e)
   }
   b := new(strings.Builder)
   t.Execute(b, map[string]int{"month": 12, "day": 31})
   println(b.String())
}
Run Code Online (Sandbox Code Playgroud)

https://golang.org/pkg/strings#Builder


Tim*_*per 6

使用的实例bytes.Buffer,它实现io.Writer:

var buff bytes.Buffer
if err := tpl.Execute(&buff, data); err != nil {
    panic(err)
}
Run Code Online (Sandbox Code Playgroud)

然后,您可以string使用buff.String()或使用[]byte结果获得结果buff.Bytes().