学习思维导图
进阶篇
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()
}
}
后记
喜欢的话可以三连,后续继续更新其他内容,帮忙推一推,感谢观看!