-
Go 中 goroutine 把结果发送到无人接收的 channel 时,发送操作可能永久阻塞。本文用 context 的取消分支修复泄漏,并用固定取消次数、goroutine 增量和资源边界说明何时该用缓冲区、何时必须让底层工作也支持取消。
-
Go go env GOTOOLDIR 返回的是当前宿主工具链目录,不是 GOOS/GOARCH 目标目录。本文用 go env、工具文件检查和最终二进制复查,建立一套核对交叉编译路径的排障流程。
-
Go 的 math.Signbit 判断浮点数符号位,因此能识别负零;x < 0 判断的是数值顺序,负零与零相等所以不会命中。本文用 Copysign、Float64bits 和 NaN 边界说明两种判断的使用场景。
-
Go oggvorbis.Reader.Read 返回的是按声道交错排列的 float32 样本值。本文用双声道示例说明如何按 L0、R0、L1、R1 拆分左右声道,并处理短读、EOF、声道数和完整帧边界。
-
Go 的 RawStdEncoding 是使用标准 Base64 字母表但省略等号补位的编码器。本文说明它与 StdEncoding、RawURLEncoding 的区别,给出无填充文本的编码、解码、错误处理和边界选择。
-
默认 bufio.ScanLines 能识别 LF 与 CRLF,却不会把单独 CR 当作行结束。本文实现一个兼容混合行尾的 SplitFunc,并说明缓冲区末尾、atEOF、长 token 与错误检查的处理方式。
-
解释 embed.FS 与 io/fs 的逻辑路径规则,说明 Windows 也必须使用斜杠,并给出用 path.Join、ReadDir、Open 和 ReadFile 读取嵌入资源的跨平台写法。
-
runtime.Goexit 结束的是当前 goroutine,不会返回调用方,但已经登记的 defer 仍会执行;它不是 panic,recover 也无法捕获。本文说明 main goroutine 的特殊结果,并给出 return、error、context 和 channel 的替代选择。
-
Go types.Scope.Lookup 只查询当前符号表。本文用内外层声明说明 nil 的含义,并比较 LookupParent、使用位置及 Info.Uses 的适用场景,帮助源码分析工具正确处理外层变量与同名遮蔽。
-
Go 的 net.Resolver.Dial 只能接管纯 Go DNS 解析器建立 DNS 连接的路径。本文说明为什么要同时设置 PreferGo,怎样把 context 传入自定义 Dial,以及如何区分解析超时、DNS 地址不可达和后续业务连接超时。
-
围绕 iter.Seq2 的双值 yield、提前停止和组合调用,演示如何把键值来源封装为迭代器,再组合过滤、映射、截断和收集,同时说明 map 顺序、单次使用与并发边界。
-
Go 的 regexp/syntax.Regexp.Simplify 可以把正则语法树化为语义等价但更紧凑的表示,适合在可配置正则进入执行层前保留一份可审计的规范形态。本文用原创示例说明解析、化简、再编译的边界,并提醒它不能替代输入校验、匹配测试或性能基准。
-
Go 的 time.After 适合一次性等待,但放进高频循环后会不断创建新的计时器,让任务堆积到更难观察的状态。本文从轮询任务出发,解释 time.After 的生命周期,给出可停止的 time.NewTimer 写法,并用计数和取消测试验收修复是否生效。
-
Go 数据库请求超时后仍占连接,通常不是把 timeout 调大就能解决。应从 HTTP 请求 Context 派生查询 Context,调用 QueryContext,关闭 Rows,并结合 DBStats 与数据库日志确认取消信号真的到达驱动和数据库。
-
filepath.Clean 只做路径字符串的词法规范化,不能判断用户是否有权访问某个目录。本文用 Go 示例拆开 Clean、Rel、IsAbs 与符号链接检查的边界。