Go: 没有名称的模板

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

Go: template without name

问题

有没有一种方法可以在不给它命名的情况下从字符串创建一个template.Template
从文档上看,似乎只有New(name string)这种方式可以解析模板字符串。我编写了一个辅助函数,它使用迭代器生成一个唯一的名称。

var seq chan int

func init() {
	seq = make(chan int)
	go func() {
		for i := 0; true; i++ {
			seq <- i
		}
	}()
}

func TemplateToString(tmplStr string, data interface{}) (string, error) {
	name := fmt.Sprintf("template-%d", <-seq)
	tmpl, err := template.New(name).Parse(tmplStr)
	if err != nil {
		return "", err
	}
	buffer := bytes.Buffer{}
	err = tmpl.Execute(&buffer, data)
	return buffer.String(), err
}

playground

这个方法可以工作,但如果可能的话,我更希望有一种更简洁的方法。

英文:

Is there a way to create a template.Template from a string without giving it a name?
Looking at the docs, it seems like the New(name string) is the only way to parse a template string. I wrote a helper function which generates a unique name using an iterator.

var seq chan int

func init() {
	seq = make(chan int)
	go func() {
		for i := 0; true; i++ {
			seq &lt;- i
		}
	}()
}

func TemplateToString(tmplStr string, data interface{}) (string, error) {
	name := fmt.Sprintf(&quot;template-%d&quot;, &lt;-seq)
	tmpl, err := template.New(name).Parse(tmplStr)
	if err != nil {
		return &quot;&quot;, err
	}
	buffer := bytes.Buffer{}
	err = tmpl.Execute(&amp;buffer, data)
	return buffer.String(), err
}

playground

This works, but I would prefer a cleaner approach if it's possible.

答案1

得分: 7

你可以使用""作为你的即时模板的名称。

英文:

You can use &quot;&quot; as the name for your immediate template.

答案2

得分: 0

你也可以使用template.Templatenew内建函数:

package main

import (
   "os"
   "text/template"
)

func main() {
   t, err := new(template.Template).Parse("hello {{.}}\n")
   if err != nil {
      panic(err)
   }
   t.Execute(os.Stdout, "world")
}
英文:

You can also use template.Template with
the new builtin:

package main

import (
   &quot;os&quot;
   &quot;text/template&quot;
)

func main() {
   t, err := new(template.Template).Parse(&quot;hello {{.}}\n&quot;)
   if err != nil {
      panic(err)
   }
   t.Execute(os.Stdout, &quot;world&quot;)
}

huangapple
  • 本文由 发表于 2013年12月7日 01:08:56
  • 转载请务必保留本文链接:https://go.coder-hub.com/20429642.html
匿名

发表评论

匿名网友

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

确定