📜  GoLang 中的模板

📅  最后修改于: 2021-10-24 14:19:01             🧑  作者: Mango

Golang 中的模板是一项强大的功能,可以创建动态内容或向用户显示自定义输出。 Golang 有两个带有模板的包:

  • 文本/模板
  • html/模板

模板主要有3个部分,如下所示:

1. 行动

它们是数据评估、循环或函数等控制结构。操作由 {{ 和 }} 分隔,其中根元素通过在大括号 {{.}} 中使用点运算符(.) 来显示。这些操作控制最终输出的外观。
要放置当前 struct 对象的字段的值,请在字段名称前加上点运算符(.) 在花括号内,如{{.FieldName}} 。在其中评估的数据称为管道

2. 条件

if-else构造也可以在模板中使用。例如,要仅在条件为真时执行模板,我们可以使用以下语法:

{{if .condition}} temp_0 {{else if .condition}} temp_1 {{else}} temp_2 {{end}}

这将执行第一个模板 temp_0,如果第一个条件成立,如果第二个条件成立,则第二个模板 temp_1 将执行,否则第三个模板 temp_2 将执行。

3. 循环

也可以使用range操作在模板中使用迭代。在模板中循环的语法是:

{{range .List}} temp_0 {{else}} temp_1 {{end}}

这里 List 应该是一个数组、映射或切片,如果长度为 0,那么模板 temp_1 将被执行,否则它会遍历 List 上的元素。

模板的输入格式应为 UTF-8 编码格式。外面的任何其他文本都按原样打印到标准输出。预定义变量os.Stdout指的是标准输出,用于打印出合并后的数据。 Execute()函数采用任何实现 Writer 接口的值,并将解析的模板应用于指定的数据对象。

示例 1:

// Golang program to illustrate the
// concept of text/templates
package main
  
import (
    "os"
    "fmt"
    "text/template"
)
  
// declaring a struct
type Student struct{
  
    // declaring fields which are
    // exported and accessible 
    // outside of package as they 
    // begin with a capital letter
    Name string
    Marks int64
}
  
// main function
func main() {
  
    // defining an object of struct
    std1 := Student{"Vani", 94}
      
    // "New" creates a new template
    // with name passed as argument
    tmp1 := template.New("Template_1")
  
    // "Parse" parses a string into a template
    tmp1, _ = tmp1.Parse("Hello {{.Name}}, your marks are {{.Marks}}%!")
      
    // standard output to print merged data
    err := tmp1.Execute(os.Stdout, std1)
      
    // if there is no error, 
    // prints the output
        if err != nil {
                fmt.Println(err)
        }
}

输出:

Hello Vani, your marks are 94%!

包模板“html/template”提供了与“text/template”相同的接口,但它具有文本输出,它实现了用于生成HTML 输出的数据驱动模板。此 HTML 输出对于任何外部代码注入都是安全的。

示例 2:

“index.html”文件:




Results


Hello, {{.Name}}, ID number: {{.Id}}

  You have scored {{.Marks}}!

“main.go”文件:

// Golang program to illustrate the
// concept of html/templates
package main
  
import (
    "html/template"
    "os"
)
  
// declaring struct
type Student struct {
  
    // defining struct fields
    Name string
    Marks int
    Id string
}
  
// main function
func main() {
      
    // defining struct instance
    std1 := Student{"Vani", 94, "20024"}
  
    // Parsing the required html
    // file in same directory
    t, err := template.ParseFiles("index.html")
  
    // standard output to print merged data
    err = t.Execute(os.Stdout, std1)
}

输出:




Page Title


Hello, Vani, ID number: 20024

  You have scored 94!