Go教程技术文章
-
Go 1.23 的 maps.Keys 返回 iter.Seq 而不是切片。本文演示如何用计数和 break 获取任意前 N 个键,何时必须排序保证稳定顺序,以及如何封装可组合的 Take 迭代器。364 收藏 -
errors.Join 会丢弃 nil 参数;只有所有输入都是 nil 时才返回 nil。本文用批量校验示例说明如何判断聚合结果,并用 errors.Is 识别具体错误。364 收藏 -
用 Go iter.Seq 把回调式遍历接入 for range,讲清 yield 提前停止、资源清理、iter.Pull 和单次迭代的工程边界。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 收藏 -
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 的 time.Duration 底层是纳秒计数,裸整数不会自动变成秒。本文用超时、重试和配置解析示例,说明如何显式绑定单位并避开截断与溢出。362 收藏 -
讲清 Go io.LimitReader 的字节上限与 EOF 语义,并用 http.MaxBytesReader 实现可识别超限错误的上传接口。362 收藏