Go 源码深度解析之互斥锁 Mutex(数据结构/饥饿模式/自旋)
一、简介
写在前面:先写个结论,让大家对该结构的源码有个大概了解,之后再一步一步解析源码:
-
锁不可复制:拷贝互斥锁同时会拷贝锁的状态,容易造成死锁
-
不是可重入锁,并且一个协程上锁,可以由另外一个协程解锁
写在前面:先写个结论,让大家对该结构的源码有个大概了解,之后再一步一步解析源码:
锁不可复制:拷贝互斥锁同时会拷贝锁的状态,容易造成死锁
不是可重入锁,并且一个协程上锁,可以由另外一个协程解锁
写在前面:先写个结论,让大家对该结构的源码有个大概了解,之后再一步一步解析源码:
sync.Map 是并发安全的,内部采用读(read)写(dirty)分离,常用于 多读少写 场景
写在前面:先写个结论,让大家对该结构的源码有个大概了解,之后再一步一步解析源码。
map 是一种非常常见的数据类型,它可以用于快速地检索数据;是一种 key-value 结构的数据类型,key 是唯一的,value 可以重复
写在前面:先写个结论,让大家对该结构的源码有个大概了解,之后再一步一步解析源码:
slice是引用类型,底层是一个指向指针的数组,支持动态扩容
现在每次开发完成代码、每次改完代码都要经历“本地编译→打包→传服务器→SSH登录→停止旧服务→启动新服务”这一套流程,
算下来每次部署最少要10分钟。
Cookie 是 Gin 开发中绕不开的知识点,但基础用法易踩安全坑,今天分享下从入门到生产环境的设置方法和安全要点,希望能够帮助大家少走弯路。
func main() {
r := gin.Default()
r.GET("/set", func(c *gin.Context) {
c.SetCookie("user_token", "abc123", 3600, "/", "localhost", false, true)
c.String(200, "Cookie写入成功!")
})
r.Run(":8080")
}浏览器访问
http://localhost:8080/set即可查看Cookie