首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >Go-模板引擎(一)

Go-模板引擎(一)

原创
作者头像
堕落飞鸟
发布于 2023-04-23 13:47:25
发布于 2023-04-23 13:47:25
8250
举报
文章被收录于专栏:飞鸟的专栏飞鸟的专栏

在Web开发中,模板引擎是一个非常重要的工具,它可以让我们轻松地生成HTML、XML和其他文本格式的输出。在Go语言中,html/template和text/template包是两个常用的模板引擎。

html/template包

html/template包是Go语言标准库中提供的一个HTML模板引擎。它的主要特点是支持自动转义,可以防止跨站点脚本攻击。

模板语法

html/template包使用{{}}标记来标记模板中的动作。下面是一些常用的动作:

  • {{.}}:表示当前的数据对象;
  • {{.FieldName}}:表示数据对象的某个字段;
  • {{range .}}...{{end}}:表示对数据对象进行循环遍历;
  • {{if .FieldName}}...{{end}}:表示对数据对象的某个字段进行条件判断;
  • {{template "TemplateName" .}}:表示调用另一个模板。

示例

下面是一个使用html/template包的示例,它可以根据不同的URL参数返回不同的HTML页面。

代码语言:javascript
复制
package main

import (
    "html/template"
    "net/http"
)

type PageData struct {
    Title string
    Body  string
}

func handlerFunc(w http.ResponseWriter, r *http.Request) {
    var data PageData

    switch r.URL.Path {
    case "/":
        data = PageData{
            Title: "Home",
            Body:  "<h1>Welcome to our website!</h1>",
        }
    case "/about":
        data = PageData{
            Title: "About",
            Body:  "<h1>About us</h1><p>We are a team of web developers.</p>",
        }
    default:
        data = PageData{
            Title: "Not Found",
            Body:  "<h1>404 Page Not Found</h1>",
        }
    }

    tmpl, err := template.ParseFiles("template.html")
    if err != nil {
        http.Error(w, err.Error(), http.StatusInternalServerError)
        return
    }

    err = tmpl.Execute(w, data)
    if err != nil {
        http.Error(w, err.Error(), http.StatusInternalServerError)
        return
    }
}

func main() {
    mux := http.NewServeMux()

    mux.HandleFunc("/", handlerFunc)
    mux.HandleFunc("/about", handlerFunc)

    http.ListenAndServe(":8080", mux)
}

在上面的示例中,我们定义了一个PageData结构体,用于存储页面数据。然后,我们在handlerFunc函数中根据不同的URL参数设置不同的页面数据。最后,我们使用template.ParseFiles()方法解析模板文件,并使用template.Execute()方法将数据应用到模板中。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

目录
  • html/template包
    • 模板语法
    • 示例
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档