09 ジンフレームワークテンプレートのレンダリング
package main
import (
"github.com/gin-gonic/gin"
"net/http"
)
func main() {
r := gin.Default()
r.LoadHTMLFiles("templates/index.tmpl") //解析模版
r.GET("/index", func(c *gin.Context) {
//http请求
c.HTML(http.StatusOK, "index.tmpl", gin.H{ //模版渲染
"title": "liwenzhou.com",
})
})
r.Run(":9090") //启动server
}
インデックス.tmpl
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Hello</title>
</head>
<body>
{
{.title}}
</body>
</html>
10 gin フレームワークは json データを返します
package main
import (
"github.com/gin-gonic/gin"
"net/http"
)
func main() {
//Default返回一个默认的路由引擎
r := gin.Default()
r.GET("/json", func(c *gin.Context) {
//方法1:使用map数据
data := gin.H{"name": "小王子", "age": 18, "sex": "男"}
c.JSON(http.StatusOK, data)
})
//方法2 结构体 灵活使用tag定制化
type msg struct {
Name string `json:"name"`
Age int
Sex string
}
r.GET("/jgt", func(c *gin.Context) {
data := msg{
Name: "大王子",
Age: 19,
Sex: "男",
}
c.JSON(http.StatusOK, data)
})
r.Run(":9090")
}
18. ミドルウェア
package main
import (
"fmt"
"github.com/gin-gonic/gin"
"log"
"net/http"
"time"
)
// m1 是一个统计耗时请求耗时的中间件
func m1() gin.HandlerFunc {
return func(c *gin.Context) {
fmt.Println("m1 in")
//计时
start := time.Now()
// 调用该请求的剩余处理程序
c.Next()
// 不调用该请求的剩余处理程序
// c.Abort()
// 计算耗时
cost := time.Since(start)
log.Println(cost)
fmt.Println("m1 out")
}
}
func m2() gin.HandlerFunc {
return func(c *gin.Context) {
fmt.Println("m2 in")
//计时
c.Set("name", "小王子")
c.Next()
fmt.Println("m2 out")
}
}
func main() {
r := gin.Default()
r.Use(m1(), m2()) //全局注册中间件函数StatCost()
r.GET("/index", func(c *gin.Context) {
name, ok := c.Get("name")
if !ok {
name = "匿名用户"
}
c.JSON(http.StatusOK, gin.H{
"msg": name})
})
r.Run(":9090")
}
参考ブログ:https://www.liwenzhou.com