How to create a writer for a String in Go

huangapple go评论100阅读模式
英文:

How to create a writer for a String in Go

问题

我需要使用template.Execute方法,但我希望将结果作为字符串或字节数组返回,以便我可以将其传递给另一个template.Execute方法,但该方法将其结果写入一个写入器(writer)。有没有办法创建一个写入器,使其写入到我定义的变量中?

英文:

I need to use the *template.Execute method but I want the result as a string or byte[] so that I can pass it to another *template.Execute but the method writes its results to a writer. Is there a way to create a writer that will write to a variable I define?

答案1

得分: 28

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

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

然后,你可以使用buff.String()获取一个string类型的结果,或者使用buff.Bytes()获取一个[]byte类型的结果。

英文:

Use an instance of bytes.Buffer, which implements io.Writer:

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

You can then get a string result using buff.String(), or a []byte result using buff.Bytes().

答案2

得分: 5

你也可以使用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())
}

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

英文:

You can also use strings.Builder for this purpose:

package main

import (
   &quot;html/template&quot;
   &quot;strings&quot;
)

func main() {
   t, e := template.New(&quot;date&quot;).Parse(&quot;&lt;p&gt;{{ .month }} - {{ .day }}&lt;/p&gt;&quot;)
   if e != nil {
      panic(e)
   }
   b := new(strings.Builder)
   t.Execute(b, map[string]int{&quot;month&quot;: 12, &quot;day&quot;: 31})
   println(b.String())
}

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

huangapple
  • 本文由 发表于 2015年11月18日 09:07:30
  • 转载请务必保留本文链接:https://go.coder-hub.com/33770053.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定