Go问答技术文章
-
Go debug/dwarf.Reader.SkipChildren 只在不需要读取当前 Entry 后代时调用。本文用 Entry 树、Children 标记和 Tag 0 说明剪枝位置,并给出完整遍历与选择性遍历的判断表。197 收藏 -
Go 的 log/slog 会解析 LogValuer 返回的 Value。本文用一个最小示例说明返回自身为什么不会无限递归、Resolve 的保护边界在哪里,以及如何为敏感字段设计稳定的日志值。196 收藏 -
Go 的 database/sql.Conn.Raw 会在回调期间暴露底层驱动连接,但这个对象只能在回调内使用。本文拆开回调边界、driver.ErrBadConn、连接归还池和 Conn.Close 的并发安全问题。196 收藏 -
Go template 报 function not defined 时,关键是把 Funcs 注册放到 Parse 前,并逐项检查模板函数名、文件解析入口、ExecuteTemplate 名称和函数签名。196 收藏 -
从 initialization cycle、全局变量为空和 init 启动异常入手,解释 Go initorder 背后的包级依赖规则,并给出最小复现、依赖排查和显式构造的修复方法。196 收藏 -
Go 覆盖率统计到函数并不代表每个分支都执行。本文用表驱动测试区分包覆盖率、函数覆盖率和代码块报告,定位没有命中的分支。195 收藏 -
Go 读取标准输入遇到 io.EOF 通常表示输入自然结束,不是错误日志。本文用逐行读取和固定长度读取对比 EOF、真实 I/O 错误与 ErrUnexpectedEOF 的处理边界。195 收藏 -
Go sync.Mutex.TryLock 适合可选的最佳努力工作,不适合代替带超时的 Lock。本文解释成功与失败的同步语义、测试难点,以及如何用确定的同步结构保护核心业务。195 收藏 -
Go io.MultiWriter按顺序写入多个Writer,首个错误会截断后续目标。本文用故障示例拆解部分成功语义,并给出全量一致、尽力写入和可重试封装的处理边界。195 收藏 -
Go SSE 连接断开后,客户端应把服务端下发的 id 保存为恢复游标,重连时通过 Last-Event-ID 请求缺口;服务端按游标补发并让消费动作具备幂等性,才能同时避免漏事件和重复处理。194 收藏 -
Go slices.BinarySearch 返回的索引即使找不到元素也有意义:先保证切片有序,再用 found 判断命中,并把索引作为插入位置或下界使用。194 收藏 -
time.ParseDuration 能解析带单位的时长,但 Duration 本质是 int64 纳秒数。本文从配置输入、解析错误和范围校验三个环节说明如何避免极大值溢出,并给出安全回退写法。194 收藏 -
Go 1.27 提升了 compress/flate 的压缩速度,也可能改变 Writer 输出字节。本文区分字节快照与解压语义,给出升级测试和必须锁定产物的判断方法。194 收藏 -
Go exec.Command 使用裸程序名时会经过 PATH 查找,Go 1.19 起不会隐式执行当前目录中的程序。本文说明 ErrDot 原因、显式相对路径写法,以及 Dir、PATH 和兼容处理的区别。194 收藏 -
Go 1.21 引入的 log/slog 让结构化日志更容易落地,但字段从 slog.Any 到 Handler 再到 JSON 输出时,组、动态值和敏感字段仍有边界。本文用订单请求日志拆解字段流转、Handler 包装与脱敏验证。193 收藏