Go教程技术文章
-
Go 的 io.MultiWriter 可以把一次 Write 同步转发给多个 io.Writer。本文说明它的调用顺序、错误和短写传播方式,并给出把输出同时写入文件与内存缓冲区的实用写法。181 收藏 -
用 Go embed 把默认 YAML 配置和 HTML 模板打进二进制,配合 fs.Sub、template.ParseFS 与外部配置覆盖,解决部署时漏带资源和路径写错的问题。180 收藏 -
io.LimitReader 到达 N 字节后会主动返回 EOF,后续底层错误自然无法被观察。本文用请求体上限场景说明错误为何消失,并给出 max+1 检测超限的写法。180 收藏 -
Go 的 net/url.JoinPath 会合并 URL 路径并清理重复斜杠、点段。本文说明包级函数与 URL.JoinPath 的选择、PathEscape 的路径段边界,以及尾斜杠和错误处理要点。180 收藏 -
slog.LogAttrs 直接接收类型化 Attr,可跳过 Log 的交替键值解析和通用参数转换;再配合 Logger.With、Enabled 与基准测试,可以减少热点日志中的重复工作和不必要分配。180 收藏 -
slices.Collect 会把惰性 iter.Seq 完整物化为新切片,并从 nil 切片逐项 append。本文给出槽位、引用载荷与扩容峰值的估算方法,以及已知数量时用 AppendSeq 预分配、数量未知时限量或流式处理的写法。180 收藏 -
浏览器上传大文件时,Go 服务端要把分片编号、字节范围、校验和与合并状态分开设计。本文用可落地的 HTTP 接口拆解 Range 边界、重复分片、失败重试和断点恢复。179 收藏 -
Go 1.25 为 sync.WaitGroup 增加 Go 方法,把启动 goroutine、计数和 Done 收口到一个调用里。本文对比旧写法,说明空 WaitGroup 的启动时机、panic 约束、嵌套任务和复用边界。179 收藏 -
多个 Go 进程追加写同一个日志文件时,不要先 Seek 再 Write。本文从零实现一个 appendlog 小工具,讲清 O_APPEND 的正确用法、单次写入边界、关闭错误,以及什么时候必须增加锁或外部队列。179 收藏 -
sync.OnceValue 和 sync.OnceValues 只负责一次性初始化,不会把返回 error 当成自动重试信号。本文用最小示例说明错误缓存语义,并给出只缓存成功值的显式重试写法。179 收藏 -
从请求入口创建截止时间,沿 Go context 调用链传给服务层和下游阻塞操作,并说明局部子预算、取消传播、Err 判断与资源释放的实现边界。179 收藏 -
用 Go bytes.Reader 保存绝对偏移、回退试读分支,并区分 Seek 越界、负位置、EOF 与 ReadAt 独立探测。179 收藏 -
Golang · Go教程 | 1星期前 | Context · 超时控制 · 并发编程 · 资源管理 · go语言 · Go并发 资源释放 WithTimeout context.AfterFunc 超时任务
context.AfterFunc 可以在超时取消后主动关闭任务占用的连接或句柄,从而解除阻塞。本文给出统一释放入口、完成信号与错误回传写法,并说明正常结束、超时竞争和远程收尾的边界。179 收藏 -
Go 多模块开发时,可以用 go.work 将多个独立 go.mod 纳入同一工作区,让业务模块直接使用本地依赖模块。本文对比 go.work、replace 和正式版本依赖的边界,并给出拆分与发布建议。179 收藏 -
用 Go 标准库 log/slog 为请求日志绑定稳定的组级属性,比较 With 与 WithGroup 的差异,并通过并发测试确认字段不会串请求。178 收藏