Go教程技术文章
-
Go 的 http.ServeContent 已经处理了文件下载中的 Range 和 If-Modified-Since,但 ETag 需要应用自己补上。本文用一个小型下载接口拆开请求头、响应状态与验收方式,避免把 200、206、304 混成一种成功。111 收藏 -
Go strings.FieldsFunc 会把连续满足条件的字符视为一个分隔区间,并丢弃首尾分隔符。本文用混合分隔符和边界输入说明如何稳定切词、避免空字段误判。111 收藏 -
time.Duration.String 会自动选择合适单位,但负值、纳秒尾数和日志截断常让排查结果失真。本文用可复现实例说明 String 与 Truncate 的边界。110 收藏 -
用 atomic.Value 保存不可变配置快照,让热更新线程整份替换配置,并发请求只读当前快照,避开半更新状态与类型不一致 panic。110 收藏 -
用 Go container/ring 实现固定容量的最近采样窗口,说明如何写入、覆盖最旧值,并按时间顺序导出有效数据。110 收藏 -
用 Go atomic.Uint64 实现并发计数,说明 Add、Load、Store 和 CompareAndSwap 的边界,并区分单个计数值与多字段一致快照。110 收藏 -
Go encoding/json 默认会忽略未知字段。本文用嵌套类型的 UnmarshalJSON 和独立 Decoder,只对指定对象开启 DisallowUnknownFields,兼顾接口兼容与请求校验。110 收藏 -
用 Go net/http Client 的 CheckRedirect 比较重定向前后的 scheme、主机和端口,在信任边界变化时清理 Authorization、Cookie 与自定义 API 密钥,并说明默认转发、307/308 请求体和 ErrUseLastResponse 的处理边界。110 收藏 -
用单槽触发缓冲和单 worker 设计 Go time.Ticker 周期任务,避免慢任务重叠执行,同时保留一次下一轮触发,并说明取消、告警与可靠队列边界。110 收藏 -
Golang · Go教程 | 2个月前 | golang · 缓存 · singleflight · go · 高并发 · 后端开发 · Go 并发控制 缓存失效 请求合并 singleflight 回源
一个热门缓存键刚失效时,几百个请求可能同时回源,把数据库或下游接口推到峰值。Go 的 golang.org/x/sync/singleflight 能让同一个 key 的重叠调用只保留一趟加载,其余调用等待并复用结果。这里用一个商品读取场景说明放置位置、key 范围、多实例边界、错误传播和上线核对项。109 收藏 -
用 go/format.Source 格式化模板生成的 Go 源代码,处理完整文件与代码片段的差异,再在成功后写入文件,并说明固定 gofmt 版本的稳定性边界。109 收藏 -
slices.Insert 批量插入是否复用底层数组,先看插入后的长度是否超过原切片容量,再结合尾部或中间插入位置判断移动成本。本文给出容量判断、别名边界与可复查验证代码。109 收藏 -
Go 的 utf8.DecodeRuneInString 遇到非法 UTF-8 时返回 RuneError 和 size=1,空字符串则返回 size=0。本文用原创示例说明如何按字节推进、区分合法替换字符,并处理分块读取的字符边界。109 收藏 -
Go 1.24 引入 runtime.AddCleanup 后,资源包装对象可以把兜底清理与显式 Close 分开。本文用一个文件描述符包装示例说明 AddCleanup、Cleanup.Stop、KeepAlive 的调用边界,以及为什么它不能替代显式关闭。108 收藏 -
maps.Copy 只负责把源 map 的键值写入目标 map,不会替 nil 目标分配存储。本文解释 nil map 的读写边界、make 初始化方式,以及函数内初始化后如何返回可写 map。108 收藏