1. Golang路由系统概述

2. Golang模板基础

Golang的模板引擎允许开发者定义模板文件,并在运行时填充数据。模板文件通常以.gohtml为扩展名,使用Go的文本模板语法。

以下是一个简单的模板文件示例:

{{define "layout"}}
<!DOCTYPE html>
<html>
<head>
    <title>{{.Title}}</title>
</head>
<body>
    <h1>{{.Header}}</h1>
    <div>{{template "content" .}}</div>
</body>
</html>
{{end}}

在这个模板中,{{define "layout"}}定义了一个名为layout的模板,它包含HTML的头部、主体和尾部。{{.Title}}{{.Header}}是模板的数据变量,可以在运行时填充。

3. 创建路由

在Golang中,创建路由通常涉及以下几个步骤:

  1. 定义路由函数。
  2. 使用http.HandleFunchttp.Handle注册路由。
  3. 运行HTTP服务器。

以下是一个简单的路由示例:

package main

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

func main() {
    // 加载模板文件
    tmpl, err := template.ParseFiles("template.html")
    if err != nil {
        panic(err)
    }

    // 定义路由函数
    func homeHandler(w http.ResponseWriter, r *http.Request) {
        data := struct {
            Title string
            Header string
        }{
            Title:   "Home Page",
            Header:  "Welcome to the Home Page!",
        }

        // 使用模板渲染页面
        tmpl.Execute(w, data)
    }

    // 注册路由
    http.HandleFunc("/", homeHandler)

    // 运行HTTP服务器
    http.ListenAndServe(":8080", nil)
}

4. 处理动态路由

在实际应用中,我们可能需要处理动态路由,例如:

func userHandler(w http.ResponseWriter, r *http.Request) {
    userID := r.URL.Query().Get("id")
    data := struct {
        Title   string
        Header  string
        UserID  string
    }{
        Title:   "User Page",
        Header:  "Welcome to the User Page!",
        UserID:  userID,
    }

    tmpl.Execute(w, data)
}

// 注册路由
http.HandleFunc("/user/", userHandler)

在这个示例中,我们使用r.URL.Query().Get("id")获取URL参数,并将用户ID传递给模板。

5. 总结

通过掌握Golang的模板和路由功能,我们可以轻松搭建一个高效的路由系统。在实际开发中,可以根据需求灵活调整路由逻辑,实现复杂的Web应用。