Go问答技术文章
-
Go net.Conn 的 Deadline 是持续生效的绝对时间,不是下一次读写的等待时长。本文区分总截止时间与空闲超时,并给出读写分离、滑动刷新、清除 deadline 和超时错误判断方法。412 收藏 -
go generate 找不到生成器时,问题通常是 GOBIN 没进入 PATH。本文比较 Go 1.24+ 的 tool/go tool、仓库相对路径和带版本 go run,给出本机与 CI 都能复现的固定方式。411 收藏 -
通过 Go runtime/pprof 的 block Profile 记录同步阻塞累计时间,再用 go tool pprof 的 top、list 和调用图定位锁、channel 与 WaitGroup 的等待点。411 收藏 -
解释 Go API 中 nil slice 与空 slice 的 JSON 差异,给出响应边界归一化、omitempty 边界和 encoding/json v1/v2 迁移测试方案。411 收藏 -
解释 Go testing.T.Parallel 为什么要等父测试函数返回,拆解 t.Run、并行栅栏、共享资源和调试检查方法。409 收藏 -
Golang · Go问答 | 3天前 | error · api设计 · database/sql · Go问答 · database/sql errors.Is 错误封装 Go错误处理 错误转换 领域错误
Go 业务层通常不应直接暴露 sql.ErrNoRows 或具体驱动错误。本文用稳定领域错误、私有 cause、操作上下文和 errors.Is,兼顾调用方判断、内部诊断与数据库实现可替换性。409 收藏 -
Golang · Go问答 | 1天前 | go · 文件上传 · Go教程 · net/http · Multipart表单 ParseMultipartForm mime/multipart Go文件上传 Go MultipartReader
MultipartReader 与 ParseMultipartForm 不是两种可叠加的读取方式,而是同一请求体的两种互斥所有权模型。本文结合标准库源码解释冲突标记、隐式触发入口、流式与整体解析示例,以及请求体上限、临时文件清理和中间件边界。409 收藏 -
Go embed.FS中的路径是跨平台的虚拟路径。本文从失败现象出发,说明反斜杠为何会让ReadFile找不到文件,并给出正斜杠、path.Join和测试复查的处理方法。408 收藏 -
Go vendor 目录已经更新却仍提示依赖不一致,通常是 vendor/modules.txt 与 go.mod 的 require、replace 或显式标记不同步,或在 workspace 中用了单模块命令。本文给出完整排查流程。408 收藏 -
Go append 是否改到原切片,关键看两个切片是否共享底层数组以及剩余容量。本文用 len、cap、三索引切片和 slices.Clone 给出判断与隔离方法。407 收藏 -
Go 切片的二索引写法可能保留底层数组尾部容量,append 会意外覆盖相邻数据。本文用 full slice expression 限制 cap,说明三索引规则、扩容边界和常见误区。406 收藏 -
Go slog 字段不该全部放在调用处,也不该全部由 Handler 猜测。事件事实留在调用处,稳定作用域字段用 Logger.With 绑定,Handler 只补 context 或运行环境可统一推导的横切字段。本文给出字段归属表、包装 Handler、降级规则和性能注意。406 收藏 -
解释 Go slog ReplaceAttr 中 groups 为空、零值 Attr、空名称 Group 内联的差别,并给出按分组路径脱敏、删除内置字段和避免回调递归的安全写法。405 收藏 -
sort.Slice 不会替你校验 less 比较器是否构成严格弱序。本文从异常结果、传递性、多字段排序、稳定排序和测试清单说明如何修复比较器。404 收藏 -
Go compress/gzip 读取中途看似正常、到末尾才返回 ErrChecksum,通常是尾部长度或校验和没有通过。本文从 Reader 的结束语义、完整消费代码和 Writer.Close 收尾顺序说明如何定位与修复。404 收藏