Gin框架学习(六)

本文涉及的产品
.cn 域名,1个 12个月
简介: 来这里学Gin框架,目标明确不迷茫。

学习思维导图

Gin框架思维导图

进阶篇

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()
    }
}

后记

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

相关文章
|
Go API 网络架构
Gin框架快速入门1
Gin框架快速入门1
124 0
|
SQL 关系型数据库 MySQL
gin框架学习-Gorm入门指南
Snake Case命名风格,就是各个单词之间用下划线(_)分隔,首字母大写区分一个单词,例如: CreateTime的Snake Case风格命名为create_time
454 0
gin框架学习-Gorm入门指南
|
6月前
|
Go
gin初体验
gin初体验
|
6月前
|
JSON 中间件 API
Gin框架笔记(一) Gin框架的安装与Hello World
Gin框架笔记(一) Gin框架的安装与Hello World
212 0
|
6月前
|
JSON 中间件 数据格式
Gin框架学习笔记(六)——gin中的日志使用
Gin框架学习笔记(六)——gin中的日志使用
190 0
|
6月前
|
前端开发 中间件 关系型数据库
|
6月前
|
JSON 前端开发 Java
|
API Go 网络架构
Kratos 大乱炖 —— 整合其他Web框架:Gin、FastHttp、Hertz
Kratos默认的RPC框架使用的是gRPC,支持REST和protobuf两种通讯协议。其API都是使用protobuf定义的,REST协议是通过[grpc-gateway](https://github.com/grpc-ecosystem/grpc-gateway)转译实现的。使用protobuf定义API是具有极大优点的,具有很强的可读性、可维护性,以及工程性。工程再大,人员再多,也不会乱。 一切看起来都是很美好的。那么,问题来了,我们现在使用的是其他的Web框架,迁移就会有成本,有风险,不可能一下子就把历史存在的代码一口气转换过来到Kratos框架。那我可以在Kratos中整合其他
880 0
|
算法 搜索推荐 中间件
Go Gin web框架的路由原理及中间件原理
Go Gin web框架的路由原理及中间件原理
760 9
Go Gin web框架的路由原理及中间件原理
|
Go API
gin框架学习-快速安装gin
Gin 是一个用 Go (Golang) 编写的 Web 框架,由于 httprouter,它具有 martini 的 API,性能提高了 40 倍。具有高性能的优点。
165 0
gin框架学习-快速安装gin