Go 语言 httptest 实战:让 HTTP 测试更简单

Go 标准库里的 `httptest`,解决了 HTTP 测试里最麻烦的几件事:起服务、占端口、清理资源,以及难以稳定复现异常场景。本文按处理器测试、客户端测试和常见进阶场景展开,结合可直接运行的示例,帮助你判断该用 `NewRecorder` 还是 `NewServer`。

Go 语言 httptest 实战:让 HTTP 测试更简单

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

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

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

Golang 打包 CentOS 应用遇到权限问题怎么办

Golang 程序在 CentOS 上打包、安装或运行时出现“权限拒绝”,通常不只是一个命令没加对。本文按实际排查顺序梳理 sudo、文件权限、属主属组、SELinux 和防火墙五类常见原因,方便快速定位问题。 Go 程序在 CentOS 上编译成功,却在复制、执行或对外监听时冒出“权限拒绝”,问题往往不只出在一个地方。

Golang 打包 CentOS 应用遇到权限问题怎么办

Go 语言中何时该用 `container/list` 而非切片?

在 Go 里,`container/list` 和切片都能表示线性数据,但它们解决的问题并不一样。本文从内存布局、操作复杂度和典型场景出发,说明链表什么时候值得上场,什么时候继续用切片更稳妥。 在 Go 里,`container/list` 常被拿来和切片比较,但这两者并不是简单的“谁更快”关系。

Go 语言中何时该用 `container/list` 而非切片?

Go 1.26 让优雅退出不再只剩一句 context canceled

Go 1.26 补上了 `signal.NotifyContext` 在退出诊断上的关键短板:程序因系统信号取消时,开发者终于能通过 `context.Cause` 看见具体原因,而不再只有模糊的 `context canceled`。这让服务优雅退出、日志排障和信号处理边界都更容易说清。

Go 1.26 让优雅退出不再只剩一句 context canceled

Go 语言 map 遍历无序,是缺陷还是刻意设计?

Go 语言里 `map` 遍历结果每次都可能不同,这不是实现偶然,更不是 bug,而是运行时主动维持的设计约束。理解它为什么无序、无序到什么程度,以及需要顺序时该怎么处理,才能避免把临时现象写成长期隐患。

Go 语言 map 遍历无序,是缺陷还是刻意设计?

Go 里空指针为什么不等于 nil 接口?把这个常见坑一次讲清

Go 里“空指针赋给接口后却不等于 nil”是个很常见的坑,尤其容易出现在 error 返回值上。关键不在指针本身,而在接口内部同时保存“类型”和“值”:只有两者都为 nil,接口才真正等于 nil。 Go 里“空指针”和“空接口”看起来都像空值,但一旦和接口实现细节碰到一起,判断结果就可能和直觉完全相反。

Go 里空指针为什么不等于 nil 接口?把这个常见坑一次讲清

如何在 CentOS 上构建 Golang 项目

这篇文章用一套最小可行流程,带你在 CentOS 上完成 Go 环境安装、模块初始化、代码编写、构建运行与可选打包。保留了 yum 安装与手动安装两条路径,适合刚搭好服务器或虚拟机后快速验证 Go 开发环境。

如何在 CentOS 上构建 Golang 项目

Go 语言中 time.After、Timer 和 Ticker 怎么选?

Go 里的超时与定时逻辑看似简单,真正容易出问题的往往是循环分配、Timer 重置语义和 Ticker 退出方式。本文按 Go 1.23 前后差异拆解 time.After、Timer、Ticker 与 AfterFunc 的适用边界,帮助你按场景选型并避开常见误用。 超时控制、延迟执行、定时轮询在 Go 服务中几乎无处不在,但真正容易出问题的,往往不是 API 会不会用,而是生命周期、版本语义和并发边。

Go 语言中 time.After、Timer 和 Ticker 怎么选?

Go 字符串判空该写 len(s) == 0,还是 s == ""?

在 Go 里判断字符串是否为空,常见写法是 `len(s) == 0` 和 `s == ""`。两者在运行时性能基本没有差别,关键区别在于语义表达:前者强调长度,后者强调值。真正的选择标准,不是“哪个更快”,而是当前代码想表达什么。

Go 字符串判空该写 len(s) == 0,还是 s == ""?

CentOS 环境下如何配置 Golang 打包环境

这篇文章梳理了在 CentOS 上配置 Go 打包环境的完整步骤,包括安装 Go、设置 PATH 与 GOPATH、启用 Go Modules、执行本地构建,以及按需进行交叉编译。文中保留了原始命令,适合需要快速搭起可用编译环境的开发者参考。

CentOS 环境下如何配置 Golang 打包环境