如何保存渲染的模板而不是打印到os.Stdout?

时间:2018-08-16 11:56:09

标签: string templates go go-templates

我是Go的新手。我一直在搜索文档。在以下游乐场代码中,它正在渲染并将其打印在屏幕上。我希望将渲染的文本存储在字符串中,以便可以从函数中返回它。

package main

import (
    "os"
    "text/template"
)

type Person struct {
    Name string //exported field since it begins with a capital letter
}



func main() {
    t := template.New("sammple") //create a new template with some name
    t, _ = t.Parse("hello {{.Name}}!") //parse some content and generate a template, which is an internal representation

    p := Person{Name:"Mary"} //define an instance with required field
    t.Execute(os.Stdout, p) //merge template ‘t’ with content of ‘p’
}

https://play.golang.org/p/-qIGNSfJwEX

如何做到?

1 个答案:

答案 0 :(得分:1)

只需将其渲染到内存缓冲区中,例如bytes.Buffer,就可以通过调用其Bytes.String()方法以string的形式获取其内容:

buf := &bytes.Buffer{}
if err := t.Execute(buf, p); err != nil {
    panic(err)
}

s := buf.String()
fmt.Println(s)

这将再次打印(在Go Playground上尝试):

hello Mary!

但这一次是s字符串变量的值。

查看相关问题:Format a Go string without printing?