Go问答技术文章
-
Go http.Request FormValue 会隐式解析表单并忽略错误,导致空字符串掩盖正文损坏或字段缺失。本文给出 ParseForm、ParseMultipartForm、PostForm 与错误校验的清晰边界。129 收藏 -
go-geom 的 SRID 是几何对象上的参考系标识,不是投影计算器。本文用 SetSRID、TransformInPlace 和 EWKB 例子说明为什么修改 SRID 不会改坐标,以及真正变换坐标时应如何划分责任。129 收藏 -
设置 ClientSessionCache 后 DidResume 仍为 false,常见原因是把连接复用误当成 TLS 会话复用,或缓存没有跨连接共享。本文用可复用的 LRU 缓存和最小 HTTPS 示例拆开三层条件,并给出生产排查与安全配置要点。129 收藏 -
Go clean -cache 后构建仍像使用旧文件,通常不是缓存没有清干净,而是实际构建输入、模块目录、测试缓存、cgo 外部库或旧二进制路径出了偏差。本文给出一套从 go env、go list 到 -a 和 GODEBUG 的排查顺序。128 收藏 -
从 Go TLS 握手错误、ServerName、RootCAs 和 MinVersion/MaxVersion 入手,区分证书校验失败与协议版本协商失败,并给出不关闭证书验证的修正方式。128 收藏 -
Go os/exec 读取子进程输出时,CombinedOutput 和 StdoutPipe 为什么不能一起用?本文从 Cmd 的输出绑定关系出发,给出一次性收集与流式读取的正确写法,并说明 Start、读取、Wait 的顺序。128 收藏 -
Go embed 匹配为空时,先确认 go:embed 所在包目录,再检查模式、隐藏文件规则和 embed.FS 的树内读取路径。本文用一个小目录说明编译期匹配与运行时读取的边界。127 收藏 -
Go encoding/xml 映射命名空间失败时,关键不是记住 XML 前缀,而是让结构体标签匹配命名空间 URI。本文用 XMLName、xml.Name 和 Decoder.Token 逐层定位字段为空的原因。127 收藏 -
testing/synctest bubble 使用独立虚拟时钟,只有当所有 goroutine 都进入持久阻塞时才跳到下一个定时器时刻。本文比较真实时钟、手写 fake clock 与 synctest 的边界,并用原创示例说明 Wait、Sleep、外部 I/O 和根 goroutine 退出的影响。127 收藏 -
Go token.File.SetLines 返回 false,通常是因为行偏移没有严格递增,或某个偏移已经达到文件大小。本文从换行边界、空文件和自定义行表三个角度说明如何构造有效数据。127 收藏 -
Go 的 encoding/csv 负责解析记录和字段,不会自动识别 GBK 或 GB18030。本文从 UTF-8、GBK 解码边界出发,说明中文 CSV 出现乱码的原因与可直接复用的修正写法。126 收藏 -
围绕 Go 1.25 的 testing.T.Attr,说明测试属性的键值约束、无序日志语义、go test -json 的 attr 事件字段,以及旧版本和 CI 解析器的兼容处理。126 收藏 -
Go race 主要观察单个进程内 goroutine 对共享内存的并发访问。本文解释跨进程文件、IPC 和数据库问题为什么不会自动产生 race 报告,并给出按共享媒介分层排查的方法。126 收藏 -
io.LimitReader 遇到读取上限只会表现为 EOF,不能直接说明源数据是否超限。本文用多读一个哨兵字节和流式复制两种方式,区分完整、恰好到达上限与真正截断。126 收藏 -
Go http.Server.Shutdown 一直等待时,不要先改成 Close。先用 ConnState 找到仍在处理请求的连接,再给 Shutdown 加超时,并单独处理 WebSocket 等 hijacked 连接。126 收藏