-
Participle 内部使用带回溯的递归下降解析器,左递归会让同一产生式在消费输入前再次调用自己。本文用表达式 AST 说明原因,并给出 Primary 加 Tail 的改写方式。
-
Go 的 GOFLAGS 会把已知命令行参数注入到默认行为中,且可能来自当前 shell 或 go env -w 的持久配置。本文用 go test、go list 和 go env 说明它的来源、覆盖顺序与清理方法。
-
Go x/text/currency 的货币展示受币种、语言地区和符号选项影响。本文给出固定币种的对照代码,区分 Default 与 FromTag,并说明存储和缓存应如何保留币种身份。
-
Go flac 的 StreamInfo.NSamples 表示每个声道的时间轴样本数,不是所有声道采样值的总和。本文区分 NSamples、NChannels、BlockSize 与 Subframe.NSamples,说明统计时长、展开缓冲区和逐帧计数的正确口径。
-
filepath.Glob 返回空结果不一定是错误,常见原因是相对路径依赖当前工作目录、* 不跨目录分隔符,以及路径转义和平台规则不一致。本文用可复用代码区分空匹配、ErrBadPattern 和路径构造问题。
-
Go encoding/csv 遇到带换行的引号字段时,物理行不等于逻辑记录。本文解释按行拆分为什么会造成字段错位,并用 csv.Reader.Read、ParseError 和字段数量设置给出可执行的排查与读取方案。
-
Go channel 做 semaphore 时,先用 len 和 cap 判断再发送并不能保证并发上限。正确做法是让带缓冲 channel 的发送直接负责获取许可,接收负责释放,并用 select 表达不等待策略。
-
Go 把 typed nil 指针放进 interface 后,接口本身通常已经带有动态类型,因此直接与 nil 比较不会得到 true。本文从 error 返回场景复现原因,再给出源头修复、类型断言和受限反射三种判空方案。
-
解释 Go compress/flate.Writer 在 Close 后再次 Write 返回 flate: closed writer 的原因,区分底层 I/O 错误,并给出 Reset 与重新创建 Writer 的选择。
-
Go 依赖出现 go.sum 校验不一致时,先区分 .mod 与源码 zip 的哈希,再记录 GOPROXY、GOSUMDB 和 GOPRIVATE,用同一模块版本对比代理与 direct,最后按来源修复而不是盲目删除 go.sum。
-
Go 老客户端连接失败时,先对照客户端 MaxVersion 与服务端 MinVersion,确认双方是否存在 TLS 版本交集,再用实际握手版本排除证书、SNI 和代理问题。本文给出隔离兼容配置和复查清单。
-
Go database/sql 的 WaitCount 持续增加,不一定代表连接池正在持续恶化,因为它是累计等待次数。本文用 WaitDuration、OpenConnections、InUse 和 Idle 的时间差判断真实争用,再从连接上限、查询占用和资源归还三个方向选择修复方案。
-
Go 工具链遇到 compile、asm 或 vet 找不到、版本不一致时,可以先用 go env GOTOOLDIR 查看当前 go 命令实际使用的编译工具目录。本文区分 GOTOOLDIR、GOROOT、GOBIN 与 PATH,给出本地和 CI 中可复制的只读排查方法。
-
Go 模块联调时,可用 go mod edit -replace 将已 require 的依赖临时指向本地目录。本文说明本地路径、module 路径、版本范围、验证命令和清理步骤,避免替换不生效或把本地配置提交到仓库。
-
裸 IPv6 不等于主机加端口。说明 SplitHostPort 的方括号要求,用分字段校验示例正确组装端点,并区分 IP、域名、数字端口和 URL 的输入边界。