Go教程技术文章
-
Go net/netip 比较 IPv4 与 IPv4-mapped IPv6 时,应先用 Unmap 统一表示,再按 Addr 或 AddrPort 选择等值判断;本文说明 Is4、Is6、Is4In6、Compare 与端口边界。391 收藏 -
用 Go 的 atomic.Uint64 实现并发请求计数,掌握 Add、Load、零值、复制限制、溢出与旧版 sync/atomic 函数的使用边界。125 收藏 -
用一个有界并发队列讲清 Go sync.Cond 的 Wait、Signal、Broadcast 和 for 条件检查,避免消费者空取与关闭后永久等待。429 收藏 -
Go sync.Once 只保证初始化函数执行一次,不会因为返回错误自动重试。本文解释其完成状态语义,并给出失败可重试、成功只执行一次的互斥封装。331 收藏 -
用 Go signal.NotifyContext 把 SIGINT、SIGTERM 转成统一的 Context 取消,说明 worker、HTTP 服务和外部资源如何优雅收尾,以及 stop 的注销边界。299 收藏 -
Go exec.CommandContext 取消后,不能只看 ctx.Done。本文用 Wait 确认子进程退出,并区分超时、主动取消、非零退出和 WaitDelay 边界。323 收藏 -
Go os/exec 启动命令后,相对路径默认跟随子进程工作目录。本文用 Cmd.Dir 设置独立目录,并区分目录不存在、命令失败和结果文件落点错误等常见问题。249 收藏 -
使用一个 Go log.Logger 统一格式,再通过 io.MultiWriter 同时写入标准输出和文件;本文还说明写入错误短路、并发安全与 Close 生命周期边界。154 收藏 -
Go slog 想让 API logger 和后台任务 logger 使用不同最低级别,应分别创建 handler 和 HandlerOptions;固定阈值传 slog.Level,运行时调整使用各自的 slog.LevelVar。187 收藏 -
用 Go log/slog 在请求入口统一绑定 trace_id、request_id 和路由字段,再通过 context 传到业务函数,保持 JSON 日志可检索并避开敏感数据泄露。322 收藏 -
掌握 Go database/sql 的事务收尾方式:用 defer tx.Rollback 做失败兜底,所有操作走 sql.Tx,只有 Commit 返回 nil 才使用事务结果,避免提交错误被误判为成功。348 收藏 -
用 sql.NullString 扫描 nullable 文本,清楚区分数据库 NULL、空字符串和普通字符串,并说明批量读取、写回和接口映射中的常见坑。260 收藏 -
Go database/sql 的 sql.Stmt 可以在重复 SQL 中复用。本文按 DB、事务和局部函数三种边界说明 PrepareContext、StmtContext 与 Close 的正确放置,避开反复 Prepare 和资源迟迟不释放。106 收藏 -
用 Go crypto/rand 生成固定长度的密码学随机字节,编码为 URL 安全令牌,并说明 rand.Read 与自定义 Reader 的错误处理差异。371 收藏 -
Go 校验 HMAC 签名时,不要把十六进制或 Base64 文本当普通字符串比较。本文说明如何重新计算 MAC、解码签名并使用 hmac.Equal 比较,同时处理编码错误、长度边界和请求鉴权中的常见误区。387 收藏