Go问答技术文章
-
Go 的 io.Copy 会优先使用源的 WriterTo 或目标的 ReaderFrom,只有没有快路径时才进入通用缓冲循环;CopyBuffer 主要解决缓冲复用与尺寸实验,手写循环则用于进度、限速、校验等新增语义。本文解释三者的分派、错误处理和基准边界。243 收藏 -
io.Reader 的 Read 允许在返回最后一批数据时同时给出 io.EOF。本文从返回值契约、读取循环、io.ReadFull 和常见误区说明调用方如何避免丢数据与误判结束。110 收藏 -
Golang · Go问答 | 13小时前 | error · api设计 · database/sql · Go问答 · database/sql errors.Is 错误封装 Go错误处理 错误转换 领域错误
Go 业务层通常不应直接暴露 sql.ErrNoRows 或具体驱动错误。本文用稳定领域错误、私有 cause、操作上下文和 errors.Is,兼顾调用方判断、内部诊断与数据库实现可替换性。409 收藏 -
Go 错误建模可按调用方需求选择:只需判断固定条件时用哨兵错误,需要读取操作、资源或原因等字段时用自定义类型。本文给出 Is、As、%w、组合模式、信息边界与兼容性检查。145 收藏 -
Go 中直接比较 error 只检查当前错误值,errors.Is 会沿 Unwrap 错误链寻找匹配。本文用 %w、errors.Join 和自定义 Is 说明三种判断边界。401 收藏 -
敏感信息进入 Go 日志后,不能只靠调用点自觉替换。本文先说明已泄露日志的止损,再用 slog LogValuer、ReplaceAttr 和统一 Logger 装配建立多层脱敏,并列出嵌套字段、自由文本与旁路输出的验证清单。341 收藏 -
Go slog 日志量过大时,先用 LevelVar 和 HandlerOptions.Level 过滤低价值日志,再对可聚合的成功事件做带键采样;错误、审计和关键状态变化保持全量保留。354 收藏 -
Golang · Go问答 | 15小时前 | go · slog · 可观测性 · Go问答 · log/slog Logger.With LogAttrs Go结构化日志 slog Handler
Go slog 字段不该全部放在调用处,也不该全部由 Handler 猜测。事件事实留在调用处,稳定作用域字段用 Logger.With 绑定,Handler 只补 context 或运行环境可统一推导的横切字段。本文给出字段归属表、包装 Handler、降级规则和性能注意。406 收藏 -
go.mod replace 用于当前主模块替换某个依赖的内容来源,go.work 则把多个本地模块聚合为同一工作区的主模块集合。本文比较两者的生效范围、冲突规则、适用场景和发布边界,并给出 GOWORK=off 验证方法。195 收藏 -
Go 多模块工作区会把 use 中的本地模块同时视为主模块,可能遮住单个 go.mod 的依赖缺口。本文说明怎样用 GOWORK=off 复现独立构建、比较依赖边界,并用 require、可发布版本和 CI 单模块测试修复。274 收藏 -
本文给出 go.work 默认不入库、紧耦合单仓例外可入库的判断矩阵,并说明 go.work.sum、GOWORK=off、CI 双通道与变更权限如何约定。200 收藏 -
从本地快速改动与跨环境复现两个联调目标出发,对比 Go Modules 的 replace 和 alpha/beta 预览版本,给出选择、检查与收口方法。479 收藏 -
Go 模块路径是包身份的一部分。本文给出保留旧入口、单一新实现、类型别名与函数包装的迁移方案,并说明如何排查双份包和正确使用 replace。347 收藏 -
go mod tidy 加入看似未使用的模块,通常是因为它会扫描测试、工具、构建标签和跨平台源码。本文用依赖路径、模块图和可回滚命令说明如何判断该模块是否应该保留。400 收藏 -
性质测试适合输入域宽、确定性强且能写出不变量的函数;示例断言更适合少量关键业务边界、精确输出和外部状态行为。本文结合 Go 原生 fuzzing,给出选择矩阵、幂等性示例、反例与混合测试清单。341 收藏