Go语言技术文章
-
Go 处理大文件上传时,不要直接把请求体读进内存。本文用临时文件串起流式写入、大小校验、SHA-256 校验和原子替换,说明每一步为什么存在,以及失败时怎样清理。335 收藏 -
Go 定时任务并不只是每隔几分钟调用一次函数。本文比较 time.Ticker 与 cron 调度器在固定间隔、整点触发、错过补偿、任务重叠和停机收尾上的差异,并给出按业务约束选型的最小实现。113 收藏 -
Golang · Go问答 | 2星期前 | 微服务 · Redis · postgresql · go · 性能优化 · Redis连接池 Go连接池 PostgreSQL连接池 context超时 并发预算
一个 Go 接口同时查 Redis 和 PostgreSQL 时,连接池参数不能照搬默认值。本文从请求并发、缓存命中率和数据库连接上限出发,拆开两套连接池与 context 超时预算,给出可复现的配置、指标和回退判断。107 收藏 -
Go 1.21 之后,go 命令会根据 go.mod 的 go、toolchain 指令选择工具链。本文用一个 CI 版本漂移场景,拆开自动切换的依据、GOTOOLCHAIN 的三种边界,以及如何保留本地便利和线上可复现。316 收藏 -
Go 服务需要在不重启进程的情况下更新限流阈值、灰度开关或下游地址时,atomic.Value、RWMutex 和 channel 归属各有适用边界。本文用一个可运行的配置热加载示例比较三种方案,并给出选择规则、校验点和回滚做法。343 收藏 -
Golang · Go教程 | 2星期前 | 并发 · go · trace · 性能排查 · Go 1.25 · Go 1.25 runtime/trace FlightRecorder 运行时追踪 延迟排查
Go 1.25 的 runtime/trace.FlightRecorder 用内存环形缓冲持续保留最近一小段运行时追踪,等异常延迟发生时再写出文件。本文对比传统 Start/Stop 采集方式,给出 HTTP 服务接入、触发写盘和资源边界检查。425 收藏 -
Go 切片赋值只复制描述符,不会复制底层数组。本文对比直接赋值、copy 和 slices.Clone,演示子切片修改如何影响原数据,并说明 nil、容量和 API 返回值的选择。405 收藏 -
Go HTTP 服务的安全响应头不能只靠网关补齐。本文从 HSTS、X-Content-Type-Options 和 Referrer-Policy 三个常用边界入手,说明如何在 net/http 中统一设置、避免错误信任代理,并用 httptest 核对线上响应。337 收藏 -
并发处理一批任务时只返回第一个错误,往往会掩盖其他失败项。本文用 Go errors.Join 组合多个错误,比较首错、聚合错误和带任务标识的结果汇总,给出可验证的选择边界。278 收藏 -
处理 Go 的 io.Reader 时,EOF 不一定意味着本次没有数据。本文用一个无换行结尾的文本例子拆开 n>0 与 io.EOF 同时出现的情况,给出读取循环、bufio.Reader 和测试核对方法,避免丢掉最后一段内容。384 收藏 -
Go 里用 slices.Delete 删除元素后,切片长度变小不代表底层数组立刻释放。要结合 Go 版本、元素类型、尾部引用是否清零和切片是否继续持有容量来判断 GC 边界。本文从批量过滤场景拆开删除、复用与内存回收的关系。112 收藏 -
Go 1.21 引入的 log/slog 让结构化日志更容易落地,但字段从 slog.Any 到 Handler 再到 JSON 输出时,组、动态值和敏感字段仍有边界。本文用订单请求日志拆解字段流转、Handler 包装与脱敏验证。193 收藏 -
把 os.DirFS 接到模板、压缩包或配置读取代码后,./config.yaml 这类看似正常的路径会被 io/fs.ValidPath 拒绝。本文用最小示例解释相对路径规则、filepath 与 path 的边界,以及迁移旧代码时如何保留用户输入语义。388 收藏 -
给管理接口增加 IP 白名单时,字符串比较、IPv4 与 IPv6 混用、掩码边界都容易出错。本文使用 Go netip.ParsePrefix 和 Prefix.Contains 搭建可复用的 CIDR 白名单校验器,补齐配置检查、匹配顺序和失败回归用例。167 收藏 -
部署前想确认两份配置目录到底差在哪里,可以用 Go 标准库做一个只读快照工具。本文从 io/fs 和 filepath.WalkDir 出发,完成隐藏文件过滤、相对路径排序、SHA-256 摘要和 JSON 差异报告,并验证退出状态与异常边界。339 收藏