Go教程技术文章
-
本文用商品详情接口讲清 Go singleflight 的用法:缓存未命中时把同一个 key 的并发请求合并成一次查询,回填缓存后共享结果,并补上超时和兜底处理。114 收藏 -
Go 测试里临时目录、环境变量和共享资源容易在失败路径上残留。本文用 testing.T.Cleanup 拆解注册时机、后进先出顺序、子测试继承和并行测试边界,给出可运行的测试写法与验收清单。114 收藏 -
text/template 默认会把缺失 map 键渲染成,missingkey=zero 返回元素零值,missingkey=error 则在模板运行阶段停止。本文用可运行示例梳理三种行为与上线选择。 114 收藏 -
Golang · Go教程 | 1个月前 | 并发 · 闭包 · for range · 迁移 · Go教程 · Go 1.22 · Goroutine 闭包 循环变量 Go教程 Go 1.22 for range
Go 1.22 调整了 for 循环变量的作用域,新模块里每轮循环会有自己的变量副本,能减少闭包和 goroutine 误读最后一轮值的问题。升级时要先看 go.mod、跑测试,再处理仍需要旧语义的特殊代码。113 收藏 -
Go 定时任务并不只是每隔几分钟调用一次函数。本文比较 time.Ticker 与 cron 调度器在固定间隔、整点触发、错过补偿、任务重叠和停机收尾上的差异,并给出按业务约束选型的最小实现。113 收藏 -
Golang · Go教程 | 1星期前 | 日志 · 标准库 · time · go · Go时间格式化 encoding.TextAppender Go time.Time.AppendText RFC3339Nano
Go 1.24 为 time.Time 增加 AppendText,可把 RFC 3339 纳秒时间直接追加到已有字节切片。本文对比 Format 与 MarshalText,说明错误返回、时区偏移和日志字段复用的边界。113 收藏 -
用 go test 生成 Go 测试覆盖率文件,再用 go tool cover 按函数和语句定位未覆盖代码,并说明多包与集成测试的 covdata 边界。113 收藏 -
time.After 适合一次性等待,但把它放进长循环后,定时器生命周期和退出路径就需要重新审视。本文用可运行的 Go 代码拆开一次性等待、可停止计时器与循环复用的边界。112 收藏 -
使用 embed.FS 提供嵌套资源时,fs.ValidPath 负责判断资源名是否符合 io/fs 约定,fs.Sub 再把目录边界固定下来。本文用最小示例验证路径校验、子文件系统和读取失败的边界。112 收藏 -
Golang · Go教程 | 2个月前 | 中间件 · HTTP · recover · Go教程 · 日志排障 · recover panic 结构化日志 HTTP中间件 request_id Go教程 接口排障
从 Go HTTP 接口偶发 500 和 panic 堆栈入手,逐层补上请求 ID、recover 中间件、统一 JSON 错误、结构化日志和反向验证清单,避免服务崩溃且便于定位问题。111 收藏 -
Go 泛型约束不是把类型随便放进尖括号,而是用类型集合明确允许哪些类型,并把可比较、可排序等操作边界交给编译器检查。本文用可比较键和值排序两个例子说明约束写法、~ 底层类型和常见误区。111 收藏 -
Go 的 http.ServeContent 已经处理了文件下载中的 Range 和 If-Modified-Since,但 ETag 需要应用自己补上。本文用一个小型下载接口拆开请求头、响应状态与验收方式,避免把 200、206、304 混成一种成功。111 收藏 -
time.Duration.String 会自动选择合适单位,但负值、纳秒尾数和日志截断常让排查结果失真。本文用可复现实例说明 String 与 Truncate 的边界。110 收藏 -
用 atomic.Value 保存不可变配置快照,让热更新线程整份替换配置,并发请求只读当前快照,避开半更新状态与类型不一致 panic。110 收藏 -
用 Go container/ring 实现固定容量的最近采样窗口,说明如何写入、覆盖最旧值,并按时间顺序导出有效数据。110 收藏