Golang text/template
使用range
語法遍歷集合資料物件。
範例環境:
- Go 1.19
事前要求
參考「Golang template 模板簡單範例」了解template基本用法。
使用range
當模板中的某些部分需要逐一呈現集合資料物件中的元素,則使用{{range pipeline}} T1 {{end}}
。pipeline
是要遍歷的陣列資料集合物件,例如array、slice、map或channel;T1
是range內的template。
例如下面將模板demo中range部分以slice []Employee
中的元素來替換。
main.go
package main
import (
"os"
"text/template"
)
type Employee struct {
Name string
Age int
}
func main() {
text := `Employees:
{{range .}} Name:{{.Name}}, Age:{{.Age}}
{{end}}`
t := template.Must(template.New("demo").Parse(text)) // 解析模板內容來建立名稱為'demo'的模板
data := []Employee{
{"John", 33},
{"Mary", 28},
}
err := t.Execute(os.Stdout, data) // 將資料物件套用在模板,並將結果輸出到標準輸出
if err != nil {
panic(err)
}
}
測試
執行程式輸出結果如下:
Employees:
Name:John, Age:33
Name:Mary, Age:28
使用index
使用{{range $index, $element := pipeline}}
可取得索引值和陣列中的個別元素。
main.go
package main
import (
"html/template"
"os"
)
type Employee struct {
Name string
Age int
}
func main() {
text := `Employees:
{{range $i, $e := .}} {{$i}} - Name:{{$e.Name}}, Age:{{$e.Age}}
{{end}}`
t := template.Must(template.New("demo").Parse(text))
data := []Employee{
{"John", 33},
{"Mary", 28},
}
err := t.Execute(os.Stdout, data)
if err != nil {
panic(err)
}
}
測試
執行程式輸出結果如下:
Employees:
0 - Name:John, Age:33
1 - Name:Mary, Age:28
取得特定索引位置元素
例如使用{{index pipeline 0}}
可取得第一個索引的元素。
main.go
package main
import (
"html/template"
"os"
)
type Employee struct {
Name string
Age int
}
func main() {
text := `Employee: Name:{{(index . 0).Name}}`
t := template.Must(template.New("demo").Parse(text))
data := []Employee{
{"John", 33},
{"Mary", 28},
}
err := t.Execute(os.Stdout, data)
if err != nil {
panic(err)
}
}
測試
執行程式輸出結果如下:
Employee: Name:John
沒有留言:
張貼留言