Go语言技术文章
-
从 Logger、Handler、WithAttrs 和 WithGroup 的调用关系入手,解释结构化日志字段如何进入 Record,以及自定义 Handler 面对并发写入时应该承担哪些边界。400 收藏 -
Go database/sql 查询完成后,Rows.Close 仍可能报告驱动或网络错误。本文用一个可复现的事务流程说明关闭、读取错误与 Commit 的检查顺序。400 收藏 -
net/http.Request.BasicAuth 返回的 ok 布尔值用于区分没有 Basic Authentication 与用户名密码为空。本文用请求头样例和可运行测试拆开三种边界,避免把空密码误判成未认证。400 收藏 -
QueryContext 取消后连接不一定立刻回到连接池。本文从 Rows 生命周期、驱动取消能力和 DB.Stats 观测三个角度定位原因,并给出可复用的释放与排查模板。400 收藏 -
go mod tidy 加入看似未使用的模块,通常是因为它会扫描测试、工具、构建标签和跨平台源码。本文用依赖路径、模块图和可回滚命令说明如何判断该模块是否应该保留。400 收藏 -
Golang · Go教程 | 1个月前 | CGO · 资源管理 · Go教程 · runtime.KeepAlive runtime/cgo.Handle Go cgo C库句柄 LockOSThread
Go 封装 C 库句柄时,应让一个包装对象独占 C 指针,以显式且幂等的 Close 负责释放,并用互斥锁处理并发访问。若 C API 依赖线程状态,则用锁定 OS 线程的专属 goroutine 承担创建、调用与销毁。本文同时说明 cgo 指针边界、KeepAlive、回调句柄和发布检查。400 收藏 -
Go 源站关闭 HTTP/2 后客户端仍显示 h2,通常是因为客户端看到的是到 CDN、负载均衡或反向代理的前端连接。本文从逐跳协议边界、Server.Protocols 绑定、直连源站与 r.Proto 证据入手,定位真正仍在使用 HTTP/2 的链路。400 收藏 -
同一套 Go 应用需要随不同构建目标携带不同静态资源时,可以让构建标签选择资源入口文件,再由 embed.FS 把选中的目录编进二进制。本文给出默认版与企业版的组织方式,并让业务层保持统一的 fs.FS 接口。400 收藏 -
Go mime.ExtensionsByType 做 MIME 到扩展名的反向查询时,结果可能包含多个带点后缀。本文说明如何把它当作候选集合,并用业务格式、用户偏好或稳定排序选择默认后缀,同时明确它不负责检测文件内容。400 收藏 -
Go 1.22 之后,http.ServeMux 用模式覆盖的请求集合判断优先级,而不是按注册顺序或通配符名称决定。本文比较静态路径、单段通配、剩余路径通配、方法和主机,并说明如何识别冲突模式。400 收藏 -
Go 1.27 把 go fix 中的 waitgroup analyzer 改名为 waitgroupgo。本文区分命令入口与分析器名称,说明如何用 go tool fix help 和 go fix -diff 确认参数,并判断哪些 WaitGroup 写法适合现代化、哪些场景需要人工复核。400 收藏 -
nil map 读取缺失键返回零值,写入却会 panic。以表单状态为例说明 nil 与空 map、写入方法初始化、函数返回新 map 以及嵌套 map 的责任边界。400 收藏 -
bytes.EqualFold 可以比较两个字节切片在 UTF-8 语义下是否经过简单 Unicode 大小写折叠后相等。本文从 ASCII 标识的实际场景出发,解释长度、空切片、非字母字节和非 UTF-8 数据的边界,并给出带封装函数的 Go 示例。400 收藏 -
Go net/url.JoinPath 会合并并清理 URL 路径,但路径段应先用 PathEscape 处理。本文说明特殊字符、斜杠、点段、查询参数和 ResolveReference 的边界。400 收藏 -
reflect.Value.SetString 只有在目标值有效、Kind 为 String 且 CanSet 为 true 时才适合调用。本文说明指针取 Elem、结构体字段和未导出字段的边界。400 收藏