Go教程技术文章
-
通过文件读取和服务层包装错误的例子,拆解 Go errors.As 的目标类型匹配、%w 包装链、指针与接口边界,并给出可运行的检查方式。224 收藏 -
上传图片时先用 Go image.DecodeConfig 读取宽高和格式,再决定是否进入完整解码,减少大文件校验阶段的内存压力。223 收藏 -
io.SectionReader 只能读取创建时指定的逻辑窗口。本文解释 [off, off+n) 边界、Read 与 ReadAt 的 EOF 表现,以及跨范围读取时如何选择扩大窗口或访问底层 ReaderAt。223 收藏 -
用一个批量消费键值序列的场景,拆开 Go iter.Pull2 的 next、stop 与提前退出边界,说明如何把 Seq2 接入旧式 for 循环并避免遗漏清理。222 收藏 -
Go 配置驱动正则时,不要用 MustCompile 把外部输入变成 panic。本文用 regexp.Compile、配置键包装和规则对象,说明如何把编译失败交给配置层,并处理启动、热加载与旧规则回退边界。222 收藏 -
Go 1.21 引入的 slices.Clip 可以把切片容量收紧到长度,适合在保留小结果、释放大底层数组引用时使用。本文用可运行示例说明它的边界。221 收藏 -
用 Go os.File.Chown 在 Linux 上修改文件的数字 UID 和 GID,区分权限、符号链接与跨平台边界,并用 Stat 和错误分类完成可回滚验收。221 收藏 -
Go container/heap 的堆顶不对,通常不是 Push 自己排序失败,而是 Less 方向、Init 时机、接口内部 Pop 或修改元素后未调用 Fix。本文按不变量和 API 职责给出排查与修复方法。221 收藏 -
Go slog 让标准库自带结构化日志能力,但落地时不能只把文本换成 JSON。更稳的迁移路线是先统一字段,再接入 JSONHandler,随后治理上下文、分组、脱敏和日志成本。219 收藏 -
用 Go http.ServeContent 提供音视频或大文件时,Range 请求返回 416 往往不是客户端故障,而是 Seek、文件大小和请求区间没有对上。本文用可复现的检查路径拆开 206 与 416 的边界。219 收藏 -
Go benchmark 统计内存分配次数,最直接的方法是 go test -benchmem 或 b.ReportAllocs();需要代码读取时再使用 BenchmarkResult.AllocsPerOp 或 AllocsPerRun。219 收藏 -
用 time.NewTimer 和单 goroutine 事件循环实现可重置的空闲超时,讲清 Reset 前排空、Go 1.23 语义变化,以及 time.After、AfterFunc 的选择边界。219 收藏 -
Go io.ReadFull 读取固定长度消息时,只有 n 等于缓冲区长度且 err 为 nil 才算成功;本文区分 io.EOF、io.ErrUnexpectedEOF 与其他 Reader 错误,并给出安全的读取循环写法。219 收藏 -
Go 的 regexp.Split 遇到空匹配时,结果取决于匹配区间、相邻空匹配抑制规则和 n 参数。本文用索引和小例子说明如何判断。219 收藏 -
Go 的 http.ServeContent 不会替你决定 Cache-Control;应在调用前设置缓存策略,并配合 modtime 或 ETag 处理条件请求。本文用一个文件接口讲清响应头的职责、设置时机与常见边界。219 收藏