Gin框架学习(六)

Gin框架基础

  • 学习思维导图
    • 进阶篇
      • Swagger
      • cookie和session的区别
      • cookie
      • session
      • HTTPS
  • 后记

学习思维导图

Gin框架学习(六)_第1张图片

进阶篇

Swagger

安装Swagger:
go get -u github.com/swaggo/swag/cmd/swag
go get -u github.com/swaggo/gin-swagger
go get -u github.com/swaggo/gin-swagger/swaggerFiles
构建API文档:

package main
import (
    _ "demo/docs"
    "github.com/gin-gonic/gin"
    "github.com/swaggo/gin-swagger"
    "github.com/swaggo/gin-swagger/swaggerFiles"
    "net/http"
)
func main() {
    r := gin.Default()
    r.POST("/login", login)
    r.GET("/swagger/*any", ginSwagger.WrapHandler(swaggerFiles.Handler))
    r.Run()
}
// @登录
// @Description login
// @Accept  json
// @Produce json
// @Param   username     path    string     true        "username"
// @Param   passwd     path    string     true        "passwd"
// @Success 200 {string} string    "ok"
// @Router /login [post]
func login(c *gin.Context){
    username := c.PostForm("username")
    passwd := c.PostForm("passwd")
    c.String(http.StatusOK, "Hello world "+username+"_"+passwd)
}

cookie和session的区别

Cookie Session
由服务端保存在客户端的键值对数据 保存在服务端的键值对数据
数据量最大4K 数据量可以存很大(只要服务器支持)
保存在客户端(浏览器)端,不安全 保存在服务端也相对保存在客户端更安全

cookie

cookie:是记录客户端状态并存放在浏览器里,可以让我们用同一个浏览器访问同一个域名的时候共享数据。

配置获取

import (
    "fmt"
    "github.com/gin-gonic/gin"
)

func main() {
    r:= gin.Default()
    r.GET("/cookie", func(c *gin.Context) {
        cookie, err := c.Cookie("gin_cookie")
        if err != nil {
            cookie = "NotSet"
            c.SetCookie("gin_cookie", "test", 3600, "/", "localhost", false, true)
        }
        fmt.Println("Cookie value:", cookie)
    })
    r.Run()
}

session

安装Session:
go get -u github.com/gin-contrib/sessions

session:是记录客户端状态并存放在服务器里,服务器给每个客户端分配唯一标识,客户端向服务器发请求,服务器就知道这个请求的来源。
package main
import (
    "github.com/gin-contrib/sessions"
    "github.com/gin-contrib/sessions/cookie"
    "github.com/gin-gonic/gin"
)
func main() {
    r := gin.Default()
      // 创建基于cookie的存储引擎,secret11111 参数是用于加密的密钥
    store := cookie.NewStore([]byte("secret11111"))
    // 设置session中间件,参数mysession,指的是session的名字,也是cookie的名字
    // store是前面创建的存储引擎,我们可以替换成其他存储引擎
    r.Use(sessions.Sessions("mysession", store))
    r.GET("/hello", func(c *gin.Context) {
         // 初始化session对象
        session := sessions.Default(c)
        // 通过session.Get读取session值
        // session是键值对格式数据,因此需要通过key查询数据
        if session.Get("hello") != "world" {
            // 设置session数据
            session.Set("hello", "world")       
        }
        //发送到另一个url里    
        c.Request.URL.Path = "/hi"
        r.HandleContext(c)
    })
    r.GET("/hi", func(context *gin.Context) {
          // 初始化session对象
        session := sessions.Default(context)
        context.JSON(http.StatusOK,gin.H{
          "session":session.Get("hello"),
        })
    })
    r.Run()
}

HTTPS

对HTTPS的支持:
HTTPS的配置:

	1.云域名备案,2.添加子域名,3.域名申请SSL,4.下载证书对应的 pem 和 key 文件。
package main
import (
    "github.com/gin-gonic/gin"
    //中间件的包
    "github.com/unrolled/secure"
)
func main() {
    r := gin.Default()
    r.Use(Handler())
    r.RunTLS(":8080", "ssl.pem", "ssl.key")
}
func Handler() gin.HandlerFunc {
    return func(c *gin.Context) {
        secureMiddleware := secure.New(secure.Options{
        	//SSL的URL和重定向
            Host:    "localhost:8080",
            Redirect: true,
        })
        err := secureMiddleware.Process(c.Writer, c.Request)
        if err != nil {
            return
        }
        c.Next()
    }
}

后记

喜欢的话可以三连,后续继续更新其他内容,帮忙推一推,感谢观看!

你可能感兴趣的:(gin框架,web开发,golang,开发语言,后端)