Go教程技术文章
-
Go 1.24 的 strings.SplitSeq 返回单次消费的字符串迭代器,适合只遍历不保存结果的场景。本文对比 strings.Split 与 SplitSeq 的消费方式,核对连续分隔符、空字符串和提前 break 等边界。154 收藏 -
Golang · Go教程 | 2星期前 | 标准库 · 并发安全 · 配置管理 · Go教程 · 文件系统 · 配置热更新 os.Rename embed.FS Go embed fs.ReadFile
Go embed 适合把默认配置随二进制发布,但运行时热更新不能直接覆盖嵌入文件。本文用 embed.FS 读取默认值,再通过临时文件校验和 os.Rename 原子替换外部配置,处理并发读取、失败回滚与发布检查。448 收藏 -
用 log/slog 的 slog.Group 组织请求与数据库字段,配合 TextHandlerOptions 核对嵌套键的最终输出,避开参数错位和重复前缀。289 收藏 -
Go 文件下载接口不能只拼接用户传入的文件名。本文用 filepath.Rel 计算相对路径,拒绝跳出下载根目录的请求,并通过 http.ServeFile 返回文件。480 收藏 -
Go database/sql 查询完成后,Rows.Close 仍可能报告驱动或网络错误。本文用一个可复现的事务流程说明关闭、读取错误与 Commit 的检查顺序。400 收藏 -
text/template 默认会把缺失 map 键渲染成,missingkey=zero 返回元素零值,missingkey=error 则在模板运行阶段停止。本文用可运行示例梳理三种行为与上线选择。 114 收藏 -
Go 泛型调用报错时,问题常常不在类型参数本身,而在约束的类型集、方法集与调用点能否同时建立推导方程。本文用三个最小例子拆开接口约束、显式实例化和返回值推导的边界。228 收藏 -
批量导出或生成大文件时,不要先拼成一个巨型字节切片。本文用 io.Copy、os.CreateTemp 和 os.Rename 组成流式落盘链路,说明内存边界、失败清理和原子替换如何配合。122 收藏 -
Go 1.25 的 sync.WaitGroup.Go 把启动 goroutine、计数和完成收口放进一个方法,但它不负责取消任务,也要求 f 不发生 panic。本文用一个批处理示例拆开调用链、闭包变量和复用边界。174 收藏 -
用 bytes.Reader.WriteTo 把内存中的字节流交给 io.Writer,重点核对读取游标、短写返回和 Reader 复用时的状态边界。373 收藏 -
线上 Go 接口偶发超时,通常不是把超时时间调大就能解决。本文用一个订单查询场景演示如何沿 context 从 Handler 传到下游调用,结合日志和取消信号定位未结束的请求,并给出回滚与告警检查方法。391 收藏 -
slices.Values 把切片按顺序暴露为 iter.Seq,range 消费它时仍然读取原切片;理解 yield 返回值、提前停止和底层数据共享,才能避免把迭代器误当成快照。本文用一个可运行示例验证修改可见性与终止边界。468 收藏 -
Go 的 time.Ticker.Reset 会停止当前节拍并按新周期重新计时。本文用一个动态刷新任务说明 Reset 的调用边界、正数周期校验、慢消费者丢 tick 以及并发读写时应如何组织所有权。494 收藏 -
Golang · Go教程 | 2星期前 | 并发 · pprof · 故障排查 · Go教程 · net/http/pprof goroutineleak goroutine 泄漏 runtime/pprof Go 1.27
Go 1.27 将 goroutineleak profile 正式带入 runtime/pprof 和 net/http/pprof。本文从一个被 channel 永久阻塞的最小案例出发,演示如何采样、判断可疑协程,并说明全局变量和可运行协程为什么会造成漏报边界。243 收藏 -
Go 服务排查请求体时,io.TeeReader 可以把已经读取的数据同步写入审计缓冲区,同时把原始 Reader 的数据继续交给解析器。本文用真实读取链说明它的无缓冲边界、写入错误传播和敏感数据限制。282 收藏