Go Gin 快速学习 【模板渲染】

go 模版渲染

templates模板

  • 创建一个templates模板目录

    # 创建模板目录
    	mkdir templates 
    # 在 templates 创建 index.html 文件
    
    <!--index.html-->
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <body>
    <h1 style="color: blueviolet">{{.title }}</h1>
    </body>
    </html>
    
  • 服务中加载 templates模板

    package main
    
    import "github.com/gin-gonic/gin"
    
    func main() {
    	router := gin.Default()
    	// 加载 templates下所有的模板文件
    	router.LoadHTMLGlob("templates/*")
    	router.GET("/ping", func(c *gin.Context) {
    		c.HTML(200, "index.html", gin.H{
    			"title": "Hello, Gin!",
    		})
    	})
    
    	router.Run(":8080") // 启动服务
    }
    
    

静态文件处理

  • 创建 static 静态文件夹,在项目根路下

    # 在项目根路径下 创建 static 
    	mkdir static
    	
    # 创建 css 和 js 的 文件目录
     mkdir -p {css,js}
    
    
  • 在 static/css 和 static/js 目录下分别上传 css 文件和 js文件

  • 重新编写 templates 下的 index.html

    <!--index.html-->
    <!DOCTYPE html>
    <html lang="zh-CN">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>{{.title}}</title>
        <!-- 引入本地 Bootstrap CSS -->
        <link href="/static/css/bootstrap.min.css" rel="stylesheet">
    </head>
    <body>
    <!-- 导航栏 -->
    <nav class="navbar navbar-expand-lg navbar-light bg-light shadow-sm">
        <div class="container">
            <a class="navbar-brand" href="#">{{.title}}</a>
            <button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarNav"
                    aria-controls="navbarNav" aria-expanded="false" aria-label="Toggle navigation">
                <span class="navbar-toggler-icon"></span>
            </button>
            <div class="collapse navbar-collapse" id="navbarNav">
                <ul class="navbar-nav ms-auto">
                    <li class="nav-item">
                        <a class="nav-link active" aria-current="page" href="#">首页</a>
                    </li>
                    <li class="nav-item">
                        <a class="nav-link" href="#features">功能</a>
                    </li>
                    <li class="nav-item">
                        <a class="nav-link" href="#about">关于我们</a>
                    </li>
                    <li class="nav-item">
                        <a class="nav-link" href="#contact">联系我们</a>
                    </li>
                </ul>
            </div>
        </div>
    </nav>
    
    <!-- 页头区域 -->
    <header class="bg-gradient bg-primary text-white py-12">
        <div class="container text-center">
            <h1 class="display-4 mb-4">{{.title}}</h1>
            <p class="lead mb-6">这是一个使用 Bootstrap 和 Gin 框架开发的示例网站</p>
        </div>
    </header>
    
    <!-- 引入本地 Bootstrap Bundle with Popper -->
    <script src="/static/js/bootstrap.bundle.min.js"></script>
    </body>
    </html>
    

数据响应

json

  • c.JSON() 输出JSON格式的数据

  • 通过gin.H{} 编写json串

  • 通过结构体,快速编写json

package main

import "github.com/gin-gonic/gin"

func main() {
	r := gin.Default()
	// json响应方式1: 通过 gin.H{} 快速创建JSON响应
	r.GET("/json01", func(c *gin.Context) {
		c.JSON(200, gin.H{
			"message": "pong",
		})
	})

	// json响应方式2: 通过结构体创建JSON响应
	var response struct {
		Message string `json:"message"`
		Status  int    `json:"status"`
	}
	r.GET("/json02", func(c *gin.Context) {
		response.Status = 200
		response.Message = "pong"
		c.JSON(200, response)
	})
	r.Run(":8080")
}

xml

  • c.XML() 展示xml数据
package main

import (
	"github.com/gin-gonic/gin"
	"net/http"
)

func main() {
	r := gin.Default()
	// xml 响应方式1: 通过 gin.H{} 快速创建xml响应
	r.GET("/xml01", func(c *gin.Context) {
		c.XML(http.StatusOK, gin.H{
			"message": "pong",
			"id":      "001",
		})
	})

	// xml响应方式2: 通过结构体创建xml响应
	type Message struct {
		Message string `xml:"message"`
		Status  string `xml:"status"`
		ID      int    `xml:"id"`
	}
	var response Message
	r.GET("/xml02", func(c *gin.Context) {
		response.Status = "200"
		response.Message = "pong"
		response.ID = 1001
		c.XML(http.StatusOK, response)
	})
	r.Run(":8080")
}

protobuf (rpc) # todo??

posted @ 2025-11-17 17:58  染指未来  阅读(5)  评论(0)    收藏  举报