Go语言技术文章
-
errors.Unwrap 只调用 Unwrap() error,因此不会拆开 errors.Join 产生的 Unwrap() []error。本文说明单链与错误树的区别,以及 Is、As 和显式枚举的正确用法。364 收藏 -
使用 Go encoding/json 的 Decoder.Token、More 与 Decode 按层读取嵌套 JSON,逐条处理目标数组,并安全跳过未知结构。364 收藏 -
调用 time.Ticker.Stop 后,程序仍可能处理一次已经进入通道的时间值。关键不在于 Stop 会不会清空通道,而在于退出信号、通道消费和任务收尾的顺序。本文用可运行示例拆开这个边界。363 收藏 -
Golang · Go教程 | 1个月前 | 标准库 · 性能优化 · 字符串处理 · Go教程 · 内存分配 strings.Split Go 1.24 Go 迭代器 Go strings.SplitSeq
Go 1.24 的 strings.SplitSeq 返回迭代器,适合边读边处理分隔文本。本文对照 Split 的切片语义,验证空分隔符、连续分隔符和提前停止,并说明什么时候不该为了省一个切片改写代码。363 收藏 -
Go 1.24 的 strings.SplitSeq 返回一次性迭代器,适合只需逐项处理而不必保留整个字符串切片的场景。本文用大文本解析示例说明它与 strings.Split 的语义差异、空字段边界、内存取舍和兼容写法。363 收藏 -
io.LimitedReader 用 N 限制读取量,但读满上限不等于底层输入结束。本文用剩余字节、EOF 与下一次读取拆开判断,给出处理固定长度帧和保留尾部数据的 Go 写法。363 收藏 -
Go 定时任务如果依赖地区本地时刻,应使用 IANA Location 保存夏令时规则,并用 ParseInLocation 解析无偏移的时间字符串。本文给出加载、解析和运行前检查的完整边界。363 收藏 -
Go archive/zip 读取中文文件名时,应先查看 ZIP 的 UTF-8 标志位与 File.NonUTF8,再决定是否做 GBK 或 GB18030 转码。本文给出默认读取、来源确认、显式解码和路径安全检查的完整边界。363 收藏 -
Go math/big 的精度控制关键在于 big.Float 的尾数位数、舍入模式和 Accuracy 状态。本文说明如何用 SetPrec、SetMode 和 Acc 设定并检查精度,并比较 big.Int、big.Rat 与 big.Float 的适用边界。363 收藏 -
Go 的 big.ParseFloat 通过 prec 控制二进制有效位数,通过 RoundingMode 决定舍入方向。本文用可复用代码说明参数选择、Accuracy 判断和展示精度之间的边界。363 收藏 -
Go 文件下载接口不能只把用户传入的 path 直接 Join 后打开。安全做法是固定下载根路径,先做 Clean,再确认最终路径没有越界,同时配合扩展名白名单、大小限制、只读打开和审计记录。362 收藏 -
Go runtime/metrics 可以直接读取运行时导出的 GC 周期、堆对象和暂停时间指标,但采样时不能把累计计数当成单次耗时,也不能忽略指标类型。本文用采样器拆解 /gc/cycles/total:gc-cycles、/gc/pauses:seconds 与 Float64Histogram 的读取、换算和验收边界。362 收藏 -
解释 Go runtime.SetFinalizer 为什么不是可靠的资源释放器,结合对象可达性、GC 时机、终结器链和 Close 设计给出可验证的使用边界。362 收藏 -
Go 的 http.Client 遇到 3xx 响应时会自动跟随重定向,但 CheckRedirect 的返回值、请求头继承和错误处理很容易让调用方误以为请求丢了。本文从一个重定向异常场景出发,分层检查 req.URL、Header 和 ErrUseLastResponse,并给出可验收的修复写法。362 收藏 -
Go 1.27 允许结构体字面量直接使用嵌入结构体提升字段作为键。本文用 Gopher 和 Habitat 示例说明字段选择器规则、与旧写法的兼容边界,以及如何用 go.mod 和 go test 做编译检查。362 收藏