Go问答技术文章
-
用一个小型 CSV 检查工具,把 Go encoding/csv 的 ParseError 行列、InputOffset 字节边界和原始行片段组合起来,快速定位坏记录。398 收藏 -
Golang · Go问答 | 4星期前 | JSON · Go问答 · 接口测试 · Go JSON测试 map比较顺序不稳定 encoding/json测试 reflect.DeepEqual比较JSON cmp.Diff用法
Go JSON 测试失败不一定是数据变了,map 遍历顺序、JSON 成员排列与字节级快照是三个不同问题。本文用反序列化、reflect.DeepEqual 和 cmp.Diff 说明稳健的比较方式。397 收藏 -
time.Now 返回的时间可能同时包含墙上时钟和单调时钟,但 time.Time.Round 是墙上时间计算,会从结果中剥离单调读数。本文按比较、耗时、序列化和 map key 场景说明怎么判断与修复。397 收藏 -
从 no_application_protocol 症状出发,定位 Go TLS 客户端与服务端 NextProtos 无交集的问题,解释空列表与不匹配的差别,并用 NegotiatedProtocol 和回归测试确认修复。397 收藏 -
tar.Header.Format 变成 FormatUnknown,通常表示 Reader 虽能解析条目,却无法把其头部可靠归类为 USTAR、PAX 或 GNU;本文区分未知格式与 ErrHeader,并给出安全转存方式。397 收藏 -
交叉编译后不要只看构建机上的 GOOS 和 GOARCH。本文用 go env、文件格式、go version -m 和 build ID 四层证据,确认最终二进制实际面向的操作系统与 CPU 架构。396 收藏 -
讲清 Go http.Transport 的 IdleConnTimeout 如何按 keep-alive 空闲时长回收连接,并区分连接数量、响应头等待、请求总超时和主动清理。396 收藏 -
Go 泛型接口报错时,关键不是调用语法,而是类型参数的实际方法集。本文用 Buffer 和 Sink 示例说明 T 与 *T 的差异、编译期断言及指针接收者的取舍。396 收藏 -
Go test -run 匹配不到子测试时,重点检查正则是否按父测试和子测试分段、斜杠是否被误当层级,以及名称空格是否已规范化。396 收藏 -
围绕 Go filepath.Rel 讲清相对路径计算前提、Windows 跨盘错误、VolumeName 与 IsAbs 判断,以及失败后的绝对路径或业务错误回退方案。396 收藏 -
sync.RWMutex 不支持把 RLock 升级为 Lock,读锁未释放时申请写锁会等待自己释放读锁而形成阻塞。本文用原创代码对比拆分读写临界区与直接使用单写锁的改造方案,并说明重新检查、锁复制和对象生命周期边界。395 收藏 -
Go build 报头文件找不到时,不要先盲目改路径。按 CGO_ENABLED、CC/CXX、头文件搜索路径和 pkg-config 四层检查,通常可以快速定位 cgo 构建边界。393 收藏 -
CommentMap 记录注释与 AST 节点的关联,但 go/printer 仍按 token.Pos 把 File.Comments 穿插到输出中。本文说明删除、替换和移动节点时注释错位的根因与修复方法。393 收藏 -
Go vet 默认只启用高置信度检查,shadow 变量遮蔽分析由 golang.org/x/tools 单独提供。本文解释它没有默认启用的原因、内外层 err 的风险、固定版本运行命令,以及接入 CI 时如何处理误报。392 收藏 -
Go errors.As 的关键不是把错误再断言一次,而是按 error 实现方式声明目标变量。本文区分值错误和指针错误,说明包装后为何要传入 *T 或 **T,并给出排查清单。391 收藏