中间件gorutine 中使用协程,需要注意一点,context需要被复制一下,不能使用原本的context。
中间间中前面的可以使用c.Set("username","abc")后面的可以使用c.GET("username")。
gin中实现单文件上传
c.FormFile("file")获取对象.filename
file.Filename
c.SaveUploadFile(file,dst)
Cookie
Http是一种无状态协议,每一次访问没有任何关系。使用Cookie来实现数据保存和共享。
保持用户状态,保存浏览记录和历史 推荐商品,购物车功能。
非常简单 c.SetCookie()
获取 c.Cookie("username")
- name cookie名称
- value 对应值
- maxAge,最大寿命,秒为单位
- path,路径,表示有效路径一般为根目录
- domain,作用域,域名
- secure,http中无效,https中有效。
二级域名共享
比如a.itheima.com和b.itheima.com 则设置domain为".itheima"
Session
//表示给定一个session的存储空间
store = c.NewStore([]byte("secretbyte111"))
//一个中间件表示在执行逻辑前启用相应内存
r.Use(sessions.Sessions("mysession",store))
func(c *gin.Context){
session = sessions.Default(c)
session.Set("count",123);
session.Save();
}
Redis
gin框架支持了Redis
Goroutine的原理了解过么? 原理,其实就是问GMP模型,
- 先回答GMP分别表示什么
G:每个 Goroutine 对应一个 G 结构体,G 存储 Goroutine 的运行堆栈、状态以及任务函数
M:对OS内核级线程的封装,数量对应真实的CPU数(真正干活的对象)
P:逻辑处理器,即为G和M的调度对象,用来调度G和M之间的关联关系,其数量可通过 GOMAXPROCS()来设置,默认为核心数
- 再回答GMP调度机制:stealing机制、hand-off机制
服务能开多少个m由什么决定?开多少个P有什么界定
1. m和g开多少由内存决定,一个m=2M,一个g=2k
2. m的个数 > g的个数
3. p的个数由GOMAXPROC决定,可以设置