如何使用 GitLab CI/CD 快速实现自动化构建与发布
背景
现在每次开发完成代码、每次改完代码都要经历“本地编译→打包→传服务器→SSH登录→停止旧服务→启动新服务”这一套流程,
算下来每次部署最少要10分钟。
现在每次开发完成代码、每次改完代码都要经历“本地编译→打包→传服务器→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
defer 是 Go 语言的一大特性,defer 的字面意思是“延迟”,但很多人只知道它“延迟执行”,却不懂背后的逻辑,这是踩坑的根源。
先记住 3 个核心原理:
用 defer 可以来声明一些延迟函数,这些延迟函数会被放进队列里,在外层函数执行完成后会依次执行延迟函数:
上周调试一个支付回调接口的 Go 代码时,遇到个棘手问题:在 Goland 里给接口变量加了断点,调试时变量面板却显示“unreadable invalid interface type”,连变量类型和值都看不了。
刚用 Goland 做 Go 开发时,我对 Debug 面板上的一排按钮完全摸不着头脑——明明加了断点,点“运行”却直接跑完程序;想一步步看代码执行,误点了“跳过”导致关键逻辑没看到。
刚团队推行代码规范时,我们试过单独用 go vet、staticcheck 等工具,但切换麻烦还难统一规则,直到用了 golangci-lint——这款集成了 60+ 款检测工具的“瑞士军刀”,能一键完成代码风格、语法错误、性能隐患等全维度检测。