Go Cookie 和 Session 入门:登录态到底放在哪里
用一个简单登录态示例讲 Go 中 Cookie、Session ID、HttpOnly、Secure、SameSite、服务端存储和退出登录的基本设计。
posts
用一个简单登录态示例讲 Go 中 Cookie、Session ID、HttpOnly、Secure、SameSite、服务端存储和退出登录的基本设计。
Go 里有一个经典坑:在循环里启动 goroutine,或者在表驱动测试里写 ,最后所有闭包都拿到了同一个循环变量。很多老 Go 程序员都会下意识写一行 ,这行代码看起来有点奇怪,但它曾经非常重要。到了 Go 1.22,循环变量的语义发生了调整,很多这类问题会自然消失。
写 Go 服务时,调用外部接口慢是很常见的问题。日志里只看到“请求花了 2 秒”,但这 2 秒到底花在哪里?是 DNS 慢、建立连接慢、TLS 握手慢、服务端处理慢,还是响应体下载慢?如果只能靠猜,排查会很痛苦。
深入探索 Go 1.22 的重要特性:range over integers、math/rand/v2 包、ServeMux 路由增强、性能优化与迁移指南
泛型不是为了把所有代码都写成抽象 Go 很长时间没有泛型,所以早期 Go 代码大量依赖具体类型、小接口、函数参数和适度重复。后来 Go 加入类型参数后,很多重复工具函数终于可以写得更自然,比如 、 、 、 这类集合操作。但泛型并不意味着所有代码都应该泛型化。
很多小型 Go 服务都有一个内部页面:查看任务队列、触发一次同步、检查缓存状态。它不一定值得接入完整登录系统,但也不能裸奔在公网。HTTP Basic Auth 是一个简单选择。浏览器会弹出用户名密码框,请求头里带上凭据,服务端验证后再允许访问。
2023 年 Go 语言年度回顾与展望 2023 年是 Go 语言发展历程中非常重要的一年。从 2009 年开源至今,Go 已经走过了 14 个年头。这一年,Go 发布了两个重要版本(1.20 和 1.21),生态系统持续壮大,社区活跃度再创新高。
配置错误应该在启动时暴露 很多线上问题不是代码逻辑错,而是配置错:端口写错,数据库地址为空,第三方 API URL 少了协议,生产环境打开了调试开关,超时时间是 0。最糟糕的情况是服务启动成功,直到请求进来才暴露配置问题。
Go 的测试工具很朴素,没有复杂的断言 DSL,也没有必须学习一整套框架的压力。你只要创建一个 文件,写一个 ,再运行 ,就已经能开始了。也正因为它朴素,很多初学者会在项目变大后遇到另一个问题:测试越写越散,失败信息不清楚,新增一个场景要复制一段函数,最后大家都不太愿意补测试。
本文讲解 Go 中使用 channel、goroutine、WaitGroup 和 context 实现一个简单 Worker 队列,适合入门后台任务处理。
面向 Go 初学者的基准测试实践:从 testing.B、-benchmem、字符串拼接、切片预分配到如何判断一次优化是否真的有价值。
Go 安全编程:防范常见漏洞 安全是软件开发中最容易被忽视,却又最重要的环节。你可能写出功能完美、性能卓越的代码,但只要一个安全漏洞,就可能让整个系统崩溃,甚至导致用户数据泄露。今天,我们就来深入探讨 Go 语言中的安全编程实践,学习如何防范常见的安全漏洞。
本文讲解 Go 1.21 前后 go.mod 中 go 版本和 toolchain 指令的含义,帮助初学者理解项目工具链、语言版本和团队协作。
深入探索 Go 1.23 的迭代器特性:range over function、iter 包、Seq/Seq2 模式、惰性求值、与 channel 的对比、性能分析
本文讲解如何用 Go 标准库 flag.FlagSet 实现 add、list、done 这类子命令,帮助初学者组织可维护命令行工具。
本文用转账和订单扣库存示例讲解 Go database/sql 事务的基本模式,包括 BeginTx、defer Rollback、Commit 和上下文传播。
Go 项目结构:构建可维护的大型项目 你是否遇到过这样的场景:打开一个 Go 项目,看到所有代码都堆在 里,或者目录结构混乱得像一盘意大利面?随着项目规模增长,这种混乱的结构会让你每次修改代码都像是在拆炸弹——稍有不慎就会引发连锁反应。
本文讲解 Go database/sql 中 NULL 值的处理方式,包括 sql.NullString、sql.NullTime、指针字段和 JSON 响应转换。
覆盖率是信号,不是目标本身 Go 自带测试覆盖率工具。你可以很容易知道哪些代码被测试执行过,哪些没有。这对补测试很有帮助,但覆盖率数字本身并不等于质量。80% 覆盖率可能没有测到最关键的支付路径,40% 覆盖率也可能把核心业务规则保护得很好。
Go 1.21 泛型增强:cmp 包与内置 min/max Go 1.18 引入泛型后,社区反响热烈,但也伴随着一些疑问:"泛型是好东西,但标准库什么时候能用上?" 这个疑问非常合理。Go 1.18 虽然引入了类型参数的语法,但标准库中几乎没有使用泛型的包。