Go 语言 context.Value 的强类型安全实践

`context.Value` 常被拿来偷渡数据库连接、配置和业务参数,表面省事,实际把依赖隐藏进运行时。本文围绕 Go 中最常见的两类问题展开:类型断言导致的 panic,以及字符串 Key 冲突;再给出私有 Key 与强类型封装的可落地写法,并说明哪些数据该放进 Context。

Go 语言 context.Value 的强类型安全实践

面试题:Go 语言中读多写少,选 RWMutex 是万能的吗?

读多写少并不等于可以直接把互斥锁换成 `sync.RWMutex`。在高并发和多核环境下,读写锁的读路径同样要做原子写入,既可能引发缓存抖动,也会在写入到来时让新读请求排队。本文结合 Go 1.19+ 的实现细节,说明 `RWMutex` 何时有效、何时退化,以及 `atomic.Value` 在极端读多写少场景中的工程替代方案。

面试题:Go 语言中读多写少,选 RWMutex 是万能的吗?

从 bytes.Buffer 到 io.Pipe:实现零拷贝数据流转的实践

在 Go 中把一个 io.Writer 的输出接到 io.Reader,很多人会先想到 bytes.Buffer。但数据一旦上到 GB 级,缓存整段内容很容易把内存顶满。本文围绕 io.Pipe 的同步管道机制,梳理它的工作方式、常见死锁原因、错误传递方法,以及它和 bytes.Buffer 的适用边界。

从 bytes.Buffer 到 io.Pipe:实现零拷贝数据流转的实践

Go 数据库框架怎么选:GORM、Ent 与 SQLC 的取舍逻辑

Go 数据库框架的争论,核心已经不只是 API 好不好用,而是运行时反射与编译期代码生成两条路线的取舍。把 GORM、Ent、SQLC 放到同一业务场景里比较后,可以更清楚地判断:你到底更需要上线速度、重构安全,还是对 SQL 与性能的绝对掌控。

Go 数据库框架怎么选:GORM、Ent 与 SQLC 的取舍逻辑

Go 1.23 的 `unique` 包怎么用:少占内存,也别用错地方

Go 1.23 引入的标准库包 `unique`,把过去常见但容易踩坑的值去重做成了官方能力。它适合重复值很多、比较频繁的场景,既能减少冗余内存占用,也能把等值判断从字符串比较转成更轻量的句柄比较。

Go 1.23 的 `unique` 包怎么用:少占内存,也别用错地方

一个人也能搞定全栈,Go + HTMX 值得一试

对很多独立开发者和 Go 后端工程师来说,真正拖慢后台项目的,往往不是业务本身,而是前端工程体系的额外复杂度。Go + HTMX + Templ 这套组合的价值,在于用服务端返回 HTML 片段取代大量 JSON 与手写 JS,把交互、模板和后端逻辑重新收拢到一条更短的链路里。

一个人也能搞定全栈,Go + HTMX 值得一试

Golang 在 CentOS 上如何搭建调试环境

这篇文章把 CentOS 上搭建 Go 调试环境的流程压缩成一条清晰路径:先装好 Go,再安装 Delve,接着编译可调试二进制,最后分别说明本地调试、VS Code 接入和远程调试。文中也补充了 Delve 安装失败、无法单步进函数、IDE 找不到工具等常见问题的处理办法。

Golang 在 CentOS 上如何搭建调试环境