Go教程技术文章
-
Go 批量查询不能只检查 QueryContext 和 Scan。本文用稳定主键游标分批读取数据,并在每页推进游标前检查 Rows.Err、处理 Close 错误与上下文取消,避免把半页结果误判为成功。270 收藏 -
Go 事务业务代码返回 nil 并不代表提交成功。本文用可复用的 WithinTx 函数分别处理 BeginTx、业务执行、Rollback 与 Commit 错误,并说明上下文取消、panic 和 sql.ErrTxDone 的边界。495 收藏 -
Go 的 database/sql 连接池不是把连接数调得越大越好。本文用一段可落地的初始化代码说明 MaxOpenConns、MaxIdleConns、MaxConnMaxIdleTime、MaxConnMaxLifetime 与 DBStats 的关系,并给出等待指标和上下文超时的排查方法。171 收藏 -
Golang · Go教程 | 1个月前 | JSON · 时间处理 · Go教程 · database/sql · 后端开发 · RFC3339 Go时间序列化 time.Duration JSON 数据库时间戳 sql.NullTime
用一个小型任务接口统一 Go 业务时间、Duration 与数据库可空时间戳,给出自定义 JSON 类型、仓储映射和往返测试。212 收藏 -
讲清 Go time.Ticker 的停止语义、context 取消、慢任务丢 tick 与服务关闭等待,给出可直接改造的周期任务循环。491 收藏 -
Go 中的自然日应按目标时区的日历边界计算:先把锚点时刻转换到 Location,构造当地零点,再用 AddDate 得到下一日零点。本文解释为什么不能固定加 24 小时,并给出半开区间、UTC 查询与夏令时测试写法。260 收藏 -
Go 遍历目录树时,可在 filepath.WalkDir 回调中识别 fs.ErrPermission:对子目录返回 fs.SkipDir 继续扫描其他分支,根目录不可访问则直接失败;常规文件再用 os.Open 做本次可读性确认,并汇总数量、字节数和有限错误样本。325 收藏 -
Go 更新配置文件时不要直接截断正式文件。把临时文件放在同一目录,完整写入并同步关闭后,再用 os.Rename 一次性切换,才能降低半文件和并发读取风险。225 收藏 -
Go 的 fs.FS 可以让配置、模板和静态资源读取逻辑脱离具体存储位置。本文用同一个 LoadConfig 函数接入 os.DirFS 与 embed.FS,说明 fs.Sub、路径规则、安全边界和 MapFS 测试方法。311 收藏 -
Golang · Go教程 | 1个月前 | Go教程 · HTTP客户端 · 后端开发 · io.ReadAll io.LimitReader Go HTTP客户端 Go LimitedReader 响应体大小限制
Go HTTP 客户端面对未知或不可信响应体时,不应直接无界 io.ReadAll。本文用 io.LimitReader(max+1) 与一个哨兵字节准确识别超限,说明 Content-Length 预检、压缩响应、读取错误、Body.Close、连接复用及 httptest 边界测试。166 收藏 -
Go 可以用 io.Pipe 将 ZIP 生成器直接接到 HTTP 请求体,实现边生成边上传而不落整包临时文件。本文给出可取消、可传递错误的完整写法,并说明无缓冲背压、关闭顺序、重试和 Content-Length 限制。245 收藏 -
Go 批量任务不要只返回一个模糊错误:用结构化失败记录保留输入编号与阶段,再用 errors.Join 汇总整批失败状态,并通过 errors.Is、errors.As 支持分类判断和重试。403 收藏 -
Go 重试机制最难的不是退避算法,而是稳定地区分可重试错误与永久错误。本文用 errors.Is、errors.As、%w、领域错误类型、context 与幂等约束,给出可维护的分类器和重试边界。263 收藏 -
Go 中用 fmt.Errorf 的 %w 保留错误上下文,再用 errors.Is 沿错误链判断哨兵错误;本文还说明 %w 与 %v 的 API 暴露边界。468 收藏 -
Go 服务可以让请求边界把 trace_id 写入 context,再由 slog 自定义 Handler 在日志出口统一补充字段。本文给出可直接复用的包装器、中间件和 OpenTelemetry 提取方式,并说明伪造、覆盖与隐私边界。256 收藏