Go Gin模板渲染如何实现高效处理?
摘要:go 模版渲染 templates模板 创建一个templates模板目录 # 创建模板目录 mkdir templates # 在 templates 创建 index.html 文件 <!--index.html-
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??
