Go教程技术文章
-
Go log/slog.Group 可以把多个属性收拢到同一个日志组中。本文从请求日志场景说明 key、属性参数、空键和动态属性的处理方式,并比较 Group、GroupAttrs 与 WithGroup 的选择边界。225 收藏 -
Goose 默认按分号识别 SQL 语句,存储过程内部的多个分号可能导致迁移被拆开。本文说明如何用 StatementBegin 和 StatementEnd 包住完整过程,并区分 Up、Down、NO TRANSACTION 与 MySQL multiStatements 的职责。225 收藏 -
Go fmt.Errorf 通过 %w 同时保留任务上下文与错误原因,调用方使用 errors.Is 和 errors.As 判断类别并提取详情。结合配置解析示例说明多层包装、多原因与 nil 的边界。225 收藏 -
通过文件读取和服务层包装错误的例子,拆解 Go errors.As 的目标类型匹配、%w 包装链、指针与接口边界,并给出可运行的检查方式。224 收藏 -
用 Go sync.Cond 实现有界生产者消费者队列时,关键不是记住 Signal 或 Broadcast,而是让条件判断、互斥锁和唤醒动作保持同一条状态链。本文给出可迁移的实现方式与边界检查。224 收藏 -
io/fs 使用斜杠分隔的虚拟路径,而本地文件 API 服从操作系统规则。本文拆开 fs.ValidPath、filepath.Localize 和 filepath.FromSlash 的职责,给出可复用的跨平台转换写法。224 收藏 -
Bubble Tea 中不要让耗时查询直接阻塞 Update,而是把查询封装成 tea.Cmd,在完成后返回带数据或错误的自定义 Msg,再由 Update 统一更新模型。本文还说明如何用请求序号丢弃过期结果。224 收藏 -
上传图片时先用 Go image.DecodeConfig 读取宽高和格式,再决定是否进入完整解码,减少大文件校验阶段的内存压力。223 收藏 -
io.SectionReader 只能读取创建时指定的逻辑窗口。本文解释 [off, off+n) 边界、Read 与 ReadAt 的 EOF 表现,以及跨范围读取时如何选择扩大窗口或访问底层 ReaderAt。223 收藏 -
用一个小型 Go 服务说明 database/sql 连接池上限的配置方法:先按数据库额度留出余量,再设置 MaxOpenConns、MaxIdleConns 和连接生命周期,最后结合 DBStats 判断参数是否合适。223 收藏 -
讲清 Go GetConfigForClient 返回配置后的会话票据密钥继承、SetSessionTicketKeys 轮换和会话恢复校验边界,给出可落地的配置示例与上线清单。223 收藏 -
Go token.File.Offset 用于把文件内的 token.Pos 转回从 0 开始的字节偏移。本文从 FileSet、File.Pos 与 File.Offset 的关系讲起,结合 AST 位置、NoPos、越界位置和 UTF-8 字节列,给出适合生产诊断与源码工具的边界写法。223 收藏 -
用一个任务集合实现 Go iter.Seq 范围迭代器,说明 for range、提前停止、闭包分配与并发修改边界,帮助批处理减少临时切片。223 收藏 -
用一个自定义 ServeMux 示例说明 Go expvar 如何暴露 JSON 运行指标,并按 404、空结果、重复注册和动态值异常逐项排查。223 收藏 -
用一个批量消费键值序列的场景,拆开 Go iter.Pull2 的 next、stop 与提前退出边界,说明如何把 Seq2 接入旧式 for 循环并避免遗漏清理。222 收藏