modulepackage
0.0.0-20170224212429-dcecefd839c4
Repository: https://github.com/spivegin/fasttemplate.git
Documentation: pkg.go.dev
# README
fasttemplate
Simple and fast template engine for Go.
Fasttemplate peforms only a single task - it substitutes template placeholders with user-defined values. At high speed :)
Take a look at quicktemplate if you need fast yet powerful html template engine.
Please note that fasttemplate doesn't do any escaping on template values unlike html/template do. So values must be properly escaped before passing them to fasttemplate.
Fasttemplate is faster than text/template, strings.Replace, strings.Replacer and fmt.Fprintf on placeholders' substitution.
Below are benchmark results comparing fasttemplate performance to text/template, strings.Replace, strings.Replacer and fmt.Fprintf:
$ go test -bench=. -benchmem
PASS
BenchmarkFmtFprintf-4 2000000 790 ns/op 0 B/op 0 allocs/op
BenchmarkStringsReplace-4 500000 3474 ns/op 2112 B/op 14 allocs/op
BenchmarkStringsReplacer-4 500000 2657 ns/op 2256 B/op 23 allocs/op
BenchmarkTextTemplate-4 500000 3333 ns/op 336 B/op 19 allocs/op
BenchmarkFastTemplateExecuteFunc-4 5000000 349 ns/op 0 B/op 0 allocs/op
BenchmarkFastTemplateExecute-4 3000000 383 ns/op 0 B/op 0 allocs/op
BenchmarkFastTemplateExecuteFuncString-4 3000000 549 ns/op 144 B/op 1 allocs/op
BenchmarkFastTemplateExecuteString-4 3000000 572 ns/op 144 B/op 1 allocs/op
BenchmarkFastTemplateExecuteTagFunc-4 2000000 743 ns/op 144 B/op 3 allocs/op
Docs
See http://godoc.org/github.com/valyala/fasttemplate .
Usage
template := "http://{{host}}/?q={{query}}&foo={{bar}}{{bar}}"
t := fasttemplate.New(template, "{{", "}}")
s := t.ExecuteString(map[string]interface{}{
"host": "google.com",
"query": url.QueryEscape("hello=world"),
"bar": "foobar",
})
fmt.Printf("%s", s)
// Output:
// http://google.com/?q=hello%3Dworld&foo=foobarfoobar
Advanced usage
template := "Hello, [user]! You won [prize]!!! [foobar]"
t, err := fasttemplate.NewTemplate(template, "[", "]")
if err != nil {
log.Fatalf("unexpected error when parsing template: %s", err)
}
s := t.ExecuteFuncString(func(w io.Writer, tag string) (int, error) {
switch tag {
case "user":
return w.Write([]byte("John"))
case "prize":
return w.Write([]byte("$100500"))
default:
return w.Write([]byte(fmt.Sprintf("[unknown tag %q]", tag)))
}
})
fmt.Printf("%s", s)
// Output:
// Hello, John! You won $100500!!! [unknown tag "foobar"]
# Functions
Execute substitutes template tags (placeholders) with the corresponding values from the map m and writes the result to the given writer w.
ExecuteFunc calls f on each template tag (placeholder) occurrence.
ExecuteFuncString calls f on each template tag (placeholder) occurrence and substitutes it with the data written to TagFunc's w.
ExecuteString substitutes template tags (placeholders) with the corresponding values from the map m and returns the result.
New parses the given template using the given startTag and endTag as tag start and tag end.
NewTemplate parses the given template using the given startTag and endTag as tag start and tag end.
# Structs
Template implements simple template engine, which can be used for fast tags' (aka placeholders) substitution.
# Type aliases
TagFunc can be used as a substitution value in the map passed to Execute*.