0
点赞
收藏
分享

微信扫一扫

go语言学习-gin框架渲染

天蓝Sea 2023-04-11 阅读 91

数据格式响应

package main

import (
	"net/http"

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

// 定义接收数据的结构体
type Login struct {
	//binding ,required修饰字段,若接收为空值,则报错,是必须字段
	User    string `form:"username" json:"user" uri:"user" xml:"user" binding:"required"`
	Pssword string `form:"password" json:"password" uri:"password" xml:"password" binding:"required"`
}

func main() {
	//创建路由
	//默认使用了两个中间件logger(),Recovery()
	r := gin.Default()
	//JSON绑定
	r.POST("loginJSON", func(ctx *gin.Context) {
		//申明接收的变量
		var json Login
		//将request的body中的数据,自动按照json格式解析到结构体
		if err := ctx.ShouldBindJSON(&json); err != nil {
			//返回错误信息
			//gin.H封装了生成json的工具
			ctx.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
			return
		}

		//判断用户名密码是否正确
		if json.User != "root" || json.Pssword != "admin" {
			ctx.JSON(http.StatusBadRequest, gin.H{"status": "304"})
			return
		}
		ctx.JSON(http.StatusOK, gin.H{"status": "200"})
	})
	r.Run()

}

HTML模板渲染

  • gin支持加载HTML模板, 然后根据模板参数进行配置并返回相应的数据,本质上就是字符串替换
  • LoadHTMLGlob()方法可以加载模板文件

package main

import (
	"net/http"

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

//gin支持加载HTML模板, 然后根据模板参数进行配置并返回相应的数据,本质上就是字符串替换
//LoadHTMLGlob()方法可以加载模板文件

func main() {
	r := gin.Default()
	r.LoadHTMLGlob("tem/*")
	r.GET("/index", func(ctx *gin.Context) {
		ctx.HTML(http.StatusOK, "index.html", gin.H{
			"tiltle": "我是测试",
			"ce":     "1223456",
		})
	})
	r.Run()
}

<!DOCTYPE html>
<html lang="en">
    <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>{{.tiltle}}</title>
    </head>
    <body>
        helloworld{{.ce}}
    </body>
</html>

重定向

package main

import (
	"net/http"

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

func main() {
	r := gin.Default()
	r.GET("/index", func(c *gin.Context) {
		c.Redirect(http.StatusMovedPermanently, "http://www.5lmh.com")
	})
	r.Run()
}

异步同步

package main

import (
	"log"
	"time"

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

//goroutine机制可以方便地实现异步处理
//另外,在启动新的goroutine时,不应该使用原始上下文,必须使用它的只读副本

func main() {
	r := gin.Default()
	//异步
	r.GET("/long_async", func(ctx *gin.Context) {
		//需要搞一个副本
		copyContext := ctx.Copy()
		//异步处理
		go func() {
			time.Sleep(3 * time.Second)
			log.Println("异步执行:" + copyContext.Request.URL.Path)
		}()
	})

	//同步
	r.GET("/long_sync", func(ctx *gin.Context) {
		time.Sleep(3 * time.Second)
		log.Println("同步执行" + ctx.Request.URL.Path)
	})
	r.Run()

}

举报

相关推荐

0 条评论