-
Go 服务需要在不重启进程的情况下更新限流阈值、灰度开关或下游地址时,atomic.Value、RWMutex 和 channel 归属各有适用边界。本文用一个可运行的配置热加载示例比较三种方案,并给出选择规则、校验点和回滚做法。
-
Go 1.25 的 runtime/trace.FlightRecorder 用内存环形缓冲持续保留最近一小段运行时追踪,等异常延迟发生时再写出文件。本文对比传统 Start/Stop 采集方式,给出 HTTP 服务接入、触发写盘和资源边界检查。
-
Go HTTP 服务的安全响应头不能只靠网关补齐。本文从 HSTS、X-Content-Type-Options 和 Referrer-Policy 三个常用边界入手,说明如何在 net/http 中统一设置、避免错误信任代理,并用 httptest 核对线上响应。
-
把 os.DirFS 接到模板、压缩包或配置读取代码后,./config.yaml 这类看似正常的路径会被 io/fs.ValidPath 拒绝。本文用最小示例解释相对路径规则、filepath 与 path 的边界,以及迁移旧代码时如何保留用户输入语义。
-
给管理接口增加 IP 白名单时,字符串比较、IPv4 与 IPv6 混用、掩码边界都容易出错。本文使用 Go netip.ParsePrefix 和 Prefix.Contains 搭建可复用的 CIDR 白名单校验器,补齐配置检查、匹配顺序和失败回归用例。
-
部署前想确认两份配置目录到底差在哪里,可以用 Go 标准库做一个只读快照工具。本文从 io/fs 和 filepath.WalkDir 出发,完成隐藏文件过滤、相对路径排序、SHA-256 摘要和 JSON 差异报告,并验证退出状态与异常边界。
-
Go 1.21 引入的 clear 可以清空 map 或 slice,但两者的结果并不一样:map 保留对象并删除键值,slice 只把元素置为零值且长度容量不变。本文用缓存重建和批处理缓冲两个场景,说明 clear 的行为、引用影响、容量边界和可验证的复用写法。
-
Go 1.26 重写了 go fix,它现在可以借助分析器发现并应用一批安全的现代化改动。本文从一个旧模块升级现场切入,说明如何先扫描、再查看差异、分批应用,并用 go test、go vet 和基准测试确认改动没有越过兼容边界。
-
Go 的 url.JoinPath 会清理路径中的 ./ 和 ../,并重新处理斜杠;它适合拼接已分段的 URL 路径,但不能替代 PathEscape,也不应把整段用户输入直接当作一个路径片段。本文用文件名、RawPath 和查询参数案例讲清边界。
-
Go sync.Pool 能减少临时对象分配,但它不是可靠缓存。本文用日志和基准测试拆开 Get、Put、GC 清空、对象重置与并发场景,说明哪些对象适合放进 Pool,哪些数据必须交给真正的缓存或业务存储。
-
调用 context.WithCancel 后,goroutine 仍然不退出,通常不是 cancel 失效,而是工作循环没有监听 Done 或被阻塞在不可取消的操作上。本文用最小代码复现问题,再通过 pprof、日志和退出计数定位原因,给出可回归的修复方式。
-
用 Go 标准库 http.ServeContent 做一个可断点续传的文件接口,串起 Range、206 Partial Content、Last-Modified 和 If-Modified-Since,并补上路径、时间和回归检查。
-
Go 服务返回静态 JSON 或文章详情时,ETag 可以让浏览器先带 If-None-Match 询问资源是否变化,未变化就返回 304,减少响应体传输。本文用 net/http 写一个可运行的缓存协商示例,说明哈希生成、条件判断、响应头顺序和测试边界。
-
Go 服务需要在不重启进程的情况下临时关闭一条新逻辑时,atomic.Bool 可以提供轻量的并发开关。本文用运行时功能开关示例说明 Load、Store、启动默认值、灰度比例和回滚检查该怎么组织,避免数据竞争与状态不一致。
-
Go 服务处理大批量 JSON 时,直接把请求体解码成完整结构体并不总是划算。本文用订单事件示例比较 json.Unmarshal、json.Decoder 和 json.RawMessage 的分配与吞吐边界,并给出可复现的基准测试写法。