Go问答技术文章
-
无缓冲 Channel 强调发送与接收的同步交接,有缓冲 Channel 用有限队列吸收生产者和消费者的短时速率差异。本文从阻塞条件、业务语义、容量估算、关闭责任和取消路径说明如何做选择。421 收藏 -
子测试调用 t.Parallel 后,直接包住它的 t.Run 就可以返回,父测试函数继续执行;子测试在 Parallel 之后的部分会暂停到父测试函数返回后再恢复,但父测试整体仍要等全部子测试完成。本文同时说明 defer、t.Cleanup 和分组等待的区别。420 收藏 -
Go exec.Cmd.Cancel 默认会直接 Kill 子进程。本文用自定义取消信号配合 WaitDelay,说明如何给子进程清理机会、限制管道等待,并正确判断取消后的错误边界。418 收藏 -
Go 的 sync.Mutex 首次使用后不能复制。本文用结构体赋值和值接收者说明复制如何造成永久等待或保护失效,并给出指针接收者、go vet 与并发测试的修复清单。416 收藏 -
slog.WithGroup 只影响分组建立后追加的字段;JSONHandler 输出嵌套对象,TextHandler 则使用点号限定键名。本文用最小复现定位调用顺序、Group 混用和自定义 Handler 问题,并给出统一构造与测试方法。416 收藏 -
对比 Go filepath.IsLocal 与 filepath.Clean 的职责、边界输入和安全路径拼接方式,说明词法判断与真实文件系统检查不能混为一谈。414 收藏 -
Go 原生 fuzz 测试发现 panic 后,先固定失败语料并用 -run 稳定重放,再定位最小输入边界、修复校验逻辑,最后保留 corpus 作为回归测试资产。414 收藏 -
Go net.Conn 的 Deadline 是持续生效的绝对时间,不是下一次读写的等待时长。本文区分总截止时间与空闲超时,并给出读写分离、滑动刷新、清除 deadline 和超时错误判断方法。412 收藏 -
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 vendor 目录已经更新却仍提示依赖不一致,通常是 vendor/modules.txt 与 go.mod 的 require、replace 或显式标记不同步,或在 workspace 中用了单模块命令。本文给出完整排查流程。408 收藏 -
Go slog 字段不该全部放在调用处,也不该全部由 Handler 猜测。事件事实留在调用处,稳定作用域字段用 Logger.With 绑定,Handler 只补 context 或运行环境可统一推导的横切字段。本文给出字段归属表、包装 Handler、降级规则和性能注意。406 收藏 -
Go 中直接比较 error 只检查当前错误值,errors.Is 会沿 Unwrap 错误链寻找匹配。本文用 %w、errors.Join 和自定义 Is 说明三种判断边界。401 收藏 -
QueryContext 取消后连接不一定立刻回到连接池。本文从 Rows 生命周期、驱动取消能力和 DB.Stats 观测三个角度定位原因,并给出可复用的释放与排查模板。400 收藏 -
go mod tidy 加入看似未使用的模块,通常是因为它会扫描测试、工具、构建标签和跨平台源码。本文用依赖路径、模块图和可回滚命令说明如何判断该模块是否应该保留。400 收藏