Templates: added comments, output and listed in examples (#413)
This commit is contained in:
parent
5fa0d40cdb
commit
ccfd710f2b
@ -48,6 +48,7 @@ Collection Functions
|
||||
String Functions
|
||||
String Formatting
|
||||
Regular Expressions
|
||||
Text Templates
|
||||
JSON
|
||||
XML
|
||||
Time
|
||||
|
115
examples/text-templates/text-templates.go
Normal file
115
examples/text-templates/text-templates.go
Normal file
@ -0,0 +1,115 @@
|
||||
// Go offers built-in support for creating
|
||||
// dynamic content or showing customized output to the user called Template.
|
||||
|
||||
package main
|
||||
|
||||
// Go has two template packages. one is "text/template" for
|
||||
// regular text manipulation, and another one is "html/template"
|
||||
// which has the same API as "text/template" but has additional security features.
|
||||
// It should be used when generating HTML.
|
||||
import (
|
||||
"log"
|
||||
"os"
|
||||
"text/template"
|
||||
)
|
||||
|
||||
func main() {
|
||||
|
||||
// New creates a template with a specific name and returns a pointer to it.
|
||||
t1 := template.New("t1")
|
||||
|
||||
// Parse parses its parameter as template body.
|
||||
// We use {{.}} to access the value passed to the template when it's getting executed.
|
||||
t1, err := t1.Parse("Value is {{.}}\n")
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
|
||||
// If we want to ignore the errors we can use Must function.
|
||||
// It will panic if an error occurs when parsing the template.
|
||||
t1 = template.Must(t1.Parse("Value is {{.}}\n"))
|
||||
|
||||
// Execute applies parsed template to the data we pass to it and writes the output to the io.Writer.
|
||||
t1.Execute(os.Stdout, t1.Name())
|
||||
t1.Execute(os.Stdout, "some text")
|
||||
t1.Execute(os.Stdout, true)
|
||||
t1.Execute(os.Stdout, 5)
|
||||
t1.Execute(os.Stdout, []string{
|
||||
"Go",
|
||||
"Rust",
|
||||
"C++",
|
||||
"C#",
|
||||
})
|
||||
t1.Execute(os.Stdout, struct{ name string }{
|
||||
name: "Jane Doe",
|
||||
})
|
||||
|
||||
// If the data is a struct we can use the {{.FieldName}} action to access its fields.
|
||||
// The fields should be exported to be accessible when template is executing.
|
||||
t2, _ := template.
|
||||
New("t2").
|
||||
Parse("Fullname: {{.Fullname}}\n")
|
||||
|
||||
t2.Execute(os.Stdout, struct {
|
||||
Fullname string
|
||||
}{
|
||||
Fullname: "Jane Doe",
|
||||
})
|
||||
|
||||
// The same applies to maps; with maps there is no restriction on the case of key names.
|
||||
t2.Execute(os.Stdout, map[string]string{
|
||||
"Fullname": "Mickey Mouse",
|
||||
})
|
||||
|
||||
// You can use if control structure to show data conditionally.
|
||||
// The data between if block will be shown if the field is truthy.
|
||||
// Means it is not false boolean, empty string, nil or zero length slice, nil map/pointer.
|
||||
t3, _ := template.
|
||||
New("t3").
|
||||
Parse(`{{if .Field1}}
|
||||
If block => {{.Field1}}
|
||||
{{ else if .Field2}}
|
||||
Else if block => {{.Field2}}
|
||||
{{ else }}
|
||||
Else block
|
||||
{{ end }}`)
|
||||
|
||||
s := struct {
|
||||
Field1 string
|
||||
Field2 []string
|
||||
}{}
|
||||
|
||||
s.Field1 = ""
|
||||
s.Field2 = []string{}
|
||||
t3.Execute(os.Stdout, s)
|
||||
|
||||
s.Field1 = "Some text"
|
||||
s.Field2 = nil
|
||||
t3.Execute(os.Stdout, s)
|
||||
|
||||
// Using a range action you can loop through a slice.
|
||||
// Each time the range block is getting executed dot will be set
|
||||
// to current item of slice.
|
||||
t4, _ := template.
|
||||
New("t4").
|
||||
Parse(`Range: {{ range . }}
|
||||
{{.}}
|
||||
{{ end }}`)
|
||||
t4.Execute(os.Stdout,
|
||||
[]string{
|
||||
"Go",
|
||||
"Rust",
|
||||
"C++",
|
||||
"C#",
|
||||
})
|
||||
|
||||
// You can assign and reassign a value to a variable in templates.
|
||||
t5, _ := template.
|
||||
New("t5").
|
||||
Parse(`Variables:
|
||||
{{ $language := "go" }}
|
||||
{{ $language }}
|
||||
{{ $language = "C" }}
|
||||
{{ $language }}`)
|
||||
t5.Execute(os.Stdout, nil)
|
||||
}
|
2
examples/text-templates/text-templates.hash
Normal file
2
examples/text-templates/text-templates.hash
Normal file
@ -0,0 +1,2 @@
|
||||
69a28314f7ebd877b184b35a8166e2fcaab56754
|
||||
-mRr-NuSB6f
|
24
examples/text-templates/text-templates.sh
Normal file
24
examples/text-templates/text-templates.sh
Normal file
@ -0,0 +1,24 @@
|
||||
$ go run templates.go
|
||||
Value is t1
|
||||
Value is some text
|
||||
Value is true
|
||||
Value is 5
|
||||
Value is [Go Rust C++ C#]
|
||||
Value is {Jane Doe}
|
||||
Fullname: Jane Doe
|
||||
Fullname: Mickey Mouse
|
||||
|
||||
Else block
|
||||
|
||||
Else if block => Some text
|
||||
Range:
|
||||
Go
|
||||
|
||||
Rust
|
||||
|
||||
C++
|
||||
|
||||
C#
|
||||
Variables:
|
||||
go
|
||||
C
|
2
public/index.html
generated
2
public/index.html
generated
@ -127,6 +127,8 @@
|
||||
|
||||
<li><a href="regular-expressions">Regular Expressions</a></li>
|
||||
|
||||
<li><a href="text-templates">Text Templates</a></li>
|
||||
|
||||
<li><a href="json">JSON</a></li>
|
||||
|
||||
<li><a href="xml">XML</a></li>
|
||||
|
2
public/json
generated
2
public/json
generated
@ -9,7 +9,7 @@
|
||||
onkeydown = (e) => {
|
||||
|
||||
if (e.key == "ArrowLeft") {
|
||||
window.location.href = 'regular-expressions';
|
||||
window.location.href = 'text-templates';
|
||||
}
|
||||
|
||||
|
||||
|
4
public/regular-expressions
generated
4
public/regular-expressions
generated
@ -14,7 +14,7 @@
|
||||
|
||||
|
||||
if (e.key == "ArrowRight") {
|
||||
window.location.href = 'json';
|
||||
window.location.href = 'text-templates';
|
||||
}
|
||||
|
||||
}
|
||||
@ -329,7 +329,7 @@ the <a href="http://golang.org/pkg/regexp/"><code>regexp</code></a> package docs
|
||||
|
||||
|
||||
<p class="next">
|
||||
Next example: <a href="json">JSON</a>.
|
||||
Next example: <a href="text-templates">Text Templates</a>.
|
||||
</p>
|
||||
|
||||
|
||||
|
402
public/text-templates
generated
Normal file
402
public/text-templates
generated
Normal file
@ -0,0 +1,402 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>Go by Example: Text Templates</title>
|
||||
<link rel=stylesheet href="site.css">
|
||||
</head>
|
||||
<script>
|
||||
onkeydown = (e) => {
|
||||
|
||||
if (e.key == "ArrowLeft") {
|
||||
window.location.href = 'regular-expressions';
|
||||
}
|
||||
|
||||
|
||||
if (e.key == "ArrowRight") {
|
||||
window.location.href = 'json';
|
||||
}
|
||||
|
||||
}
|
||||
</script>
|
||||
<body>
|
||||
<div class="example" id="text-templates">
|
||||
<h2><a href="./">Go by Example</a>: Text Templates</h2>
|
||||
|
||||
<table>
|
||||
|
||||
<tr>
|
||||
<td class="docs">
|
||||
<p>Go offers built-in support for creating
|
||||
dynamic content or showing customized output to the user called Template.</p>
|
||||
|
||||
</td>
|
||||
<td class="code empty leading">
|
||||
|
||||
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td class="docs">
|
||||
|
||||
</td>
|
||||
<td class="code leading">
|
||||
<a href="http://play.golang.org/p/-mRr-NuSB6f"><img title="Run code" src="play.png" class="run" /></a><img title="Copy code" src="clipboard.png" class="copy" />
|
||||
<pre class="chroma"><span class="kn">package</span> <span class="nx">main</span>
|
||||
</pre>
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td class="docs">
|
||||
<p>Go has two template packages. one is “text/template” for
|
||||
regular text manipulation, and another one is “html/template”
|
||||
which has the same API as “text/template” but has additional security features.
|
||||
It should be used when generating HTML.</p>
|
||||
|
||||
</td>
|
||||
<td class="code leading">
|
||||
|
||||
<pre class="chroma">
|
||||
<span class="kn">import</span> <span class="p">(</span>
|
||||
<span class="s">"log"</span>
|
||||
<span class="s">"os"</span>
|
||||
<span class="s">"text/template"</span>
|
||||
<span class="p">)</span>
|
||||
</pre>
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td class="docs">
|
||||
|
||||
</td>
|
||||
<td class="code leading">
|
||||
|
||||
<pre class="chroma"><span class="kd">func</span> <span class="nf">main</span><span class="p">()</span> <span class="p">{</span>
|
||||
</pre>
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td class="docs">
|
||||
<p>New creates a template with a specific name and returns a pointer to it.</p>
|
||||
|
||||
</td>
|
||||
<td class="code leading">
|
||||
|
||||
<pre class="chroma">
|
||||
<span class="nx">t1</span> <span class="o">:=</span> <span class="nx">template</span><span class="p">.</span><span class="nf">New</span><span class="p">(</span><span class="s">"t1"</span><span class="p">)</span>
|
||||
</pre>
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td class="docs">
|
||||
<p>Parse parses its parameter as template body.
|
||||
We use {{.}} to access the value passed to the template when it’s getting executed.</p>
|
||||
|
||||
</td>
|
||||
<td class="code leading">
|
||||
|
||||
<pre class="chroma">
|
||||
<span class="nx">t1</span><span class="p">,</span> <span class="nx">err</span> <span class="o">:=</span> <span class="nx">t1</span><span class="p">.</span><span class="nf">Parse</span><span class="p">(</span><span class="s">"Value is {{.}}\n"</span><span class="p">)</span>
|
||||
<span class="k">if</span> <span class="nx">err</span> <span class="o">!=</span> <span class="kc">nil</span> <span class="p">{</span>
|
||||
<span class="nx">log</span><span class="p">.</span><span class="nf">Fatal</span><span class="p">(</span><span class="nx">err</span><span class="p">)</span>
|
||||
<span class="p">}</span>
|
||||
</pre>
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td class="docs">
|
||||
<p>If we want to ignore the errors we can use Must function.
|
||||
It will panic if an error occurs when parsing the template.</p>
|
||||
|
||||
</td>
|
||||
<td class="code leading">
|
||||
|
||||
<pre class="chroma">
|
||||
<span class="nx">t1</span> <span class="p">=</span> <span class="nx">template</span><span class="p">.</span><span class="nf">Must</span><span class="p">(</span><span class="nx">t1</span><span class="p">.</span><span class="nf">Parse</span><span class="p">(</span><span class="s">"Value is {{.}}\n"</span><span class="p">))</span>
|
||||
</pre>
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td class="docs">
|
||||
<p>Execute applies parsed template to the data we pass to it and writes the output to the io.Writer.</p>
|
||||
|
||||
</td>
|
||||
<td class="code leading">
|
||||
|
||||
<pre class="chroma">
|
||||
<span class="nx">t1</span><span class="p">.</span><span class="nf">Execute</span><span class="p">(</span><span class="nx">os</span><span class="p">.</span><span class="nx">Stdout</span><span class="p">,</span> <span class="nx">t1</span><span class="p">.</span><span class="nf">Name</span><span class="p">())</span>
|
||||
<span class="nx">t1</span><span class="p">.</span><span class="nf">Execute</span><span class="p">(</span><span class="nx">os</span><span class="p">.</span><span class="nx">Stdout</span><span class="p">,</span> <span class="s">"some text"</span><span class="p">)</span>
|
||||
<span class="nx">t1</span><span class="p">.</span><span class="nf">Execute</span><span class="p">(</span><span class="nx">os</span><span class="p">.</span><span class="nx">Stdout</span><span class="p">,</span> <span class="kc">true</span><span class="p">)</span>
|
||||
<span class="nx">t1</span><span class="p">.</span><span class="nf">Execute</span><span class="p">(</span><span class="nx">os</span><span class="p">.</span><span class="nx">Stdout</span><span class="p">,</span> <span class="mi">5</span><span class="p">)</span>
|
||||
<span class="nx">t1</span><span class="p">.</span><span class="nf">Execute</span><span class="p">(</span><span class="nx">os</span><span class="p">.</span><span class="nx">Stdout</span><span class="p">,</span> <span class="p">[]</span><span class="kt">string</span><span class="p">{</span>
|
||||
<span class="s">"Go"</span><span class="p">,</span>
|
||||
<span class="s">"Rust"</span><span class="p">,</span>
|
||||
<span class="s">"C++"</span><span class="p">,</span>
|
||||
<span class="s">"C#"</span><span class="p">,</span>
|
||||
<span class="p">})</span>
|
||||
<span class="nx">t1</span><span class="p">.</span><span class="nf">Execute</span><span class="p">(</span><span class="nx">os</span><span class="p">.</span><span class="nx">Stdout</span><span class="p">,</span> <span class="kd">struct</span><span class="p">{</span> <span class="nx">name</span> <span class="kt">string</span> <span class="p">}{</span>
|
||||
<span class="nx">name</span><span class="p">:</span> <span class="s">"Jane Doe"</span><span class="p">,</span>
|
||||
<span class="p">})</span>
|
||||
</pre>
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td class="docs">
|
||||
<p>If the data is a struct we can use the {{.FieldName}} action to access its fields.
|
||||
The fields should be exported to be accessible when template is executing.</p>
|
||||
|
||||
</td>
|
||||
<td class="code leading">
|
||||
|
||||
<pre class="chroma">
|
||||
<span class="nx">t2</span><span class="p">,</span> <span class="nx">_</span> <span class="o">:=</span> <span class="nx">template</span><span class="p">.</span>
|
||||
<span class="nf">New</span><span class="p">(</span><span class="s">"t2"</span><span class="p">).</span>
|
||||
<span class="nf">Parse</span><span class="p">(</span><span class="s">"Fullname: {{.Fullname}}\n"</span><span class="p">)</span>
|
||||
</pre>
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td class="docs">
|
||||
|
||||
</td>
|
||||
<td class="code leading">
|
||||
|
||||
<pre class="chroma"> <span class="nx">t2</span><span class="p">.</span><span class="nf">Execute</span><span class="p">(</span><span class="nx">os</span><span class="p">.</span><span class="nx">Stdout</span><span class="p">,</span> <span class="kd">struct</span> <span class="p">{</span>
|
||||
<span class="nx">Fullname</span> <span class="kt">string</span>
|
||||
<span class="p">}{</span>
|
||||
<span class="nx">Fullname</span><span class="p">:</span> <span class="s">"Jane Doe"</span><span class="p">,</span>
|
||||
<span class="p">})</span>
|
||||
</pre>
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td class="docs">
|
||||
<p>The same applies to maps; with maps there is no restriction on the case of key names.</p>
|
||||
|
||||
</td>
|
||||
<td class="code leading">
|
||||
|
||||
<pre class="chroma">
|
||||
<span class="nx">t2</span><span class="p">.</span><span class="nf">Execute</span><span class="p">(</span><span class="nx">os</span><span class="p">.</span><span class="nx">Stdout</span><span class="p">,</span> <span class="kd">map</span><span class="p">[</span><span class="kt">string</span><span class="p">]</span><span class="kt">string</span><span class="p">{</span>
|
||||
<span class="s">"Fullname"</span><span class="p">:</span> <span class="s">"Mickey Mouse"</span><span class="p">,</span>
|
||||
<span class="p">})</span>
|
||||
</pre>
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td class="docs">
|
||||
<p>You can use if control structure to show data conditionally.
|
||||
The data between if block will be shown if the field is truthy.
|
||||
Means it is not false boolean, empty string, nil or zero length slice, nil map/pointer.</p>
|
||||
|
||||
</td>
|
||||
<td class="code leading">
|
||||
|
||||
<pre class="chroma">
|
||||
<span class="nx">t3</span><span class="p">,</span> <span class="nx">_</span> <span class="o">:=</span> <span class="nx">template</span><span class="p">.</span>
|
||||
<span class="nf">New</span><span class="p">(</span><span class="s">"t3"</span><span class="p">).</span>
|
||||
<span class="nf">Parse</span><span class="p">(</span><span class="s">`</span><span class="cp">{{</span><span class="k">if</span><span class="w"> </span><span class="na">.Field1</span><span class="cp">}}</span><span class="s">
|
||||
</span><span class="s"> If block => </span><span class="cp">{{</span><span class="na">.Field1</span><span class="cp">}}</span><span class="s">
|
||||
</span><span class="s"> </span><span class="cp">{{</span><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="na">.Field2</span><span class="cp">}}</span><span class="s">
|
||||
</span><span class="s"> Else if block => </span><span class="cp">{{</span><span class="na">.Field2</span><span class="cp">}}</span><span class="s">
|
||||
</span><span class="s"> </span><span class="cp">{{</span><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="cp">}}</span><span class="s">
|
||||
</span><span class="s"> Else block
|
||||
</span><span class="s"> </span><span class="cp">{{</span><span class="w"> </span><span class="k">end</span><span class="w"> </span><span class="cp">}}</span><span class="s">`</span><span class="p">)</span>
|
||||
</pre>
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td class="docs">
|
||||
|
||||
</td>
|
||||
<td class="code leading">
|
||||
|
||||
<pre class="chroma"> <span class="nx">s</span> <span class="o">:=</span> <span class="kd">struct</span> <span class="p">{</span>
|
||||
<span class="nx">Field1</span> <span class="kt">string</span>
|
||||
<span class="nx">Field2</span> <span class="p">[]</span><span class="kt">string</span>
|
||||
<span class="p">}{}</span>
|
||||
</pre>
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td class="docs">
|
||||
|
||||
</td>
|
||||
<td class="code leading">
|
||||
|
||||
<pre class="chroma"> <span class="nx">s</span><span class="p">.</span><span class="nx">Field1</span> <span class="p">=</span> <span class="s">""</span>
|
||||
<span class="nx">s</span><span class="p">.</span><span class="nx">Field2</span> <span class="p">=</span> <span class="p">[]</span><span class="kt">string</span><span class="p">{}</span>
|
||||
<span class="nx">t3</span><span class="p">.</span><span class="nf">Execute</span><span class="p">(</span><span class="nx">os</span><span class="p">.</span><span class="nx">Stdout</span><span class="p">,</span> <span class="nx">s</span><span class="p">)</span>
|
||||
</pre>
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td class="docs">
|
||||
|
||||
</td>
|
||||
<td class="code leading">
|
||||
|
||||
<pre class="chroma"> <span class="nx">s</span><span class="p">.</span><span class="nx">Field1</span> <span class="p">=</span> <span class="s">"Some text"</span>
|
||||
<span class="nx">s</span><span class="p">.</span><span class="nx">Field2</span> <span class="p">=</span> <span class="kc">nil</span>
|
||||
<span class="nx">t3</span><span class="p">.</span><span class="nf">Execute</span><span class="p">(</span><span class="nx">os</span><span class="p">.</span><span class="nx">Stdout</span><span class="p">,</span> <span class="nx">s</span><span class="p">)</span>
|
||||
</pre>
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td class="docs">
|
||||
<p>Using a range action you can loop through a slice.
|
||||
Each time the range block is getting executed dot will be set
|
||||
to current item of slice.</p>
|
||||
|
||||
</td>
|
||||
<td class="code leading">
|
||||
|
||||
<pre class="chroma">
|
||||
<span class="nx">t4</span><span class="p">,</span> <span class="nx">_</span> <span class="o">:=</span> <span class="nx">template</span><span class="p">.</span>
|
||||
<span class="nf">New</span><span class="p">(</span><span class="s">"t4"</span><span class="p">).</span>
|
||||
<span class="nf">Parse</span><span class="p">(</span><span class="s">`Range: </span><span class="cp">{{</span><span class="w"> </span><span class="k">range</span><span class="w"> </span><span class="na">.</span><span class="w"> </span><span class="cp">}}</span><span class="s">
|
||||
</span><span class="s"> </span><span class="cp">{{</span><span class="na">.</span><span class="cp">}}</span><span class="s">
|
||||
</span><span class="s"> </span><span class="cp">{{</span><span class="w"> </span><span class="k">end</span><span class="w"> </span><span class="cp">}}</span><span class="s">`</span><span class="p">)</span>
|
||||
<span class="nx">t4</span><span class="p">.</span><span class="nf">Execute</span><span class="p">(</span><span class="nx">os</span><span class="p">.</span><span class="nx">Stdout</span><span class="p">,</span>
|
||||
<span class="p">[]</span><span class="kt">string</span><span class="p">{</span>
|
||||
<span class="s">"Go"</span><span class="p">,</span>
|
||||
<span class="s">"Rust"</span><span class="p">,</span>
|
||||
<span class="s">"C++"</span><span class="p">,</span>
|
||||
<span class="s">"C#"</span><span class="p">,</span>
|
||||
<span class="p">})</span>
|
||||
</pre>
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td class="docs">
|
||||
<p>You can assign and reassign a value to a variable in templates.</p>
|
||||
|
||||
</td>
|
||||
<td class="code">
|
||||
|
||||
<pre class="chroma">
|
||||
<span class="nx">t5</span><span class="p">,</span> <span class="nx">_</span> <span class="o">:=</span> <span class="nx">template</span><span class="p">.</span>
|
||||
<span class="nf">New</span><span class="p">(</span><span class="s">"t5"</span><span class="p">).</span>
|
||||
<span class="nf">Parse</span><span class="p">(</span><span class="s">`Variables: </span><span class="cp">{{</span><span class="w"> </span><span class="nx">$language</span><span class="w"> </span><span class="o">:=</span><span class="w"> </span><span class="s">"go"</span><span class="w"> </span><span class="cp">}}</span><span class="s">
|
||||
</span><span class="s"> </span><span class="cp">{{</span><span class="w"> </span><span class="nx">$language</span><span class="w"> </span><span class="cp">}}</span><span class="s">
|
||||
</span><span class="s"> </span><span class="cp">{{</span><span class="w"> </span><span class="nx">$language</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s">"C"</span><span class="w"> </span><span class="cp">}}</span><span class="s">
|
||||
</span><span class="s"> </span><span class="cp">{{</span><span class="w"> </span><span class="nx">$language</span><span class="w"> </span><span class="cp">}}</span><span class="s">`</span><span class="p">)</span>
|
||||
<span class="nx">t5</span><span class="p">.</span><span class="nf">Execute</span><span class="p">(</span><span class="nx">os</span><span class="p">.</span><span class="nx">Stdout</span><span class="p">,</span> <span class="kc">nil</span><span class="p">)</span>
|
||||
<span class="p">}</span>
|
||||
</pre>
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
</table>
|
||||
|
||||
<table>
|
||||
|
||||
<tr>
|
||||
<td class="docs">
|
||||
|
||||
</td>
|
||||
<td class="code leading">
|
||||
|
||||
<pre class="chroma"><span class="gp">$</span> go run templates.go
|
||||
<span class="go">Value is my-template
|
||||
</span><span class="go">Value is some text
|
||||
</span><span class="go">Value is true
|
||||
</span><span class="go">Value is 5
|
||||
</span><span class="go">Value is [Go Rust C++ C#]
|
||||
</span><span class="go">Value is {Jane Doe}
|
||||
</span><span class="go">Fullname: Jane Doe
|
||||
</span><span class="go">Fullname: Mickey Mouse</span></pre>
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td class="docs">
|
||||
|
||||
</td>
|
||||
<td class="code leading">
|
||||
|
||||
<pre class="chroma"><span class="go"> Else block</span></pre>
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td class="docs">
|
||||
|
||||
</td>
|
||||
<td class="code leading">
|
||||
|
||||
<pre class="chroma"><span class="go"> Else if block => Some text
|
||||
</span><span class="go">Range:
|
||||
</span><span class="go"> Go</span></pre>
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td class="docs">
|
||||
|
||||
</td>
|
||||
<td class="code leading">
|
||||
|
||||
<pre class="chroma"><span class="go"> Rust</span></pre>
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td class="docs">
|
||||
|
||||
</td>
|
||||
<td class="code leading">
|
||||
|
||||
<pre class="chroma"><span class="go"> C++</span></pre>
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td class="docs">
|
||||
|
||||
</td>
|
||||
<td class="code">
|
||||
|
||||
<pre class="chroma"><span class="go"> C#
|
||||
</span><span class="go">Variables:
|
||||
</span><span class="go">go
|
||||
</span><span class="go">C</span></pre>
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
</table>
|
||||
|
||||
|
||||
<p class="next">
|
||||
Next example: <a href="json">JSON</a>.
|
||||
</p>
|
||||
|
||||
|
||||
<p class="footer">
|
||||
by <a href="https://markmcgranaghan.com">Mark McGranaghan</a> and <a href="https://eli.thegreenplace.net">Eli Bendersky</a> | <a href="https://github.com/mmcgrana/gobyexample">source</a> | <a href="https://github.com/mmcgrana/gobyexample#license">license</a>
|
||||
</p>
|
||||
|
||||
</div>
|
||||
<script>
|
||||
var codeLines = [];
|
||||
codeLines.push('');codeLines.push('package main\u000A');codeLines.push('import (\u000A \"log\"\u000A \"os\"\u000A \"text/template\"\u000A)\u000A');codeLines.push('func main() {\u000A');codeLines.push(' t1 :\u003D template.New(\"t1\")\u000A');codeLines.push(' t1, err :\u003D t1.Parse(\"Value is {{.}}\\n\")\u000A if err !\u003D nil {\u000A log.Fatal(err)\u000A }\u000A');codeLines.push(' t1 \u003D template.Must(t1.Parse(\"Value is {{.}}\\n\"))\u000A');codeLines.push(' t1.Execute(os.Stdout, t1.Name())\u000A t1.Execute(os.Stdout, \"some text\")\u000A t1.Execute(os.Stdout, true)\u000A t1.Execute(os.Stdout, 5)\u000A t1.Execute(os.Stdout, []string{\u000A \"Go\",\u000A \"Rust\",\u000A \"C++\",\u000A \"C#\",\u000A })\u000A t1.Execute(os.Stdout, struct{ name string }{\u000A name: \"Jane Doe\",\u000A })\u000A');codeLines.push(' t2, _ :\u003D template.\u000A New(\"t2\").\u000A Parse(\"Fullname: {{.Fullname}}\\n\")\u000A');codeLines.push(' t2.Execute(os.Stdout, struct {\u000A Fullname string\u000A }{\u000A Fullname: \"Jane Doe\",\u000A })\u000A');codeLines.push(' t2.Execute(os.Stdout, map[string]string{\u000A \"Fullname\": \"Mickey Mouse\",\u000A })\u000A');codeLines.push(' t3, _ :\u003D template.\u000A New(\"t3\").\u000A Parse(`{{if .Field1}}\u000A If block \u003D\u003E {{.Field1}}\u000A {{ else if .Field2}}\u000A Else if block \u003D\u003E {{.Field2}}\u000A {{ else }}\u000A Else block\u000A {{ end }}`)\u000A');codeLines.push(' s :\u003D struct {\u000A Field1 string\u000A Field2 []string\u000A }{}\u000A');codeLines.push(' s.Field1 \u003D \"\"\u000A s.Field2 \u003D []string{}\u000A t3.Execute(os.Stdout, s)\u000A');codeLines.push(' s.Field1 \u003D \"Some text\"\u000A s.Field2 \u003D nil\u000A t3.Execute(os.Stdout, s)\u000A');codeLines.push(' t4, _ :\u003D template.\u000A New(\"t4\").\u000A Parse(`Range: {{ range . }}\u000A {{.}}\u000A {{ end }}`)\u000A t4.Execute(os.Stdout,\u000A []string{\u000A \"Go\",\u000A \"Rust\",\u000A \"C++\",\u000A \"C#\",\u000A })\u000A');codeLines.push(' t5, _ :\u003D template.\u000A New(\"t5\").\u000A Parse(`Variables: {{ $language :\u003D \"go\" }}\u000A {{ $language }}\u000A {{ $language \u003D \"C\" }}\u000A {{ $language }}`)\u000A t5.Execute(os.Stdout, nil)\u000A}\u000A');codeLines.push('');codeLines.push('');codeLines.push('');codeLines.push('');codeLines.push('');codeLines.push('');
|
||||
</script>
|
||||
<script src="site.js" async></script>
|
||||
</body>
|
||||
</html>
|
Loading…
x
Reference in New Issue
Block a user