Go问答技术文章
-
解释带 sync.Mutex 的结构体为什么不能随意复制,比较值接收者、指针接收者和容器传参的差异,并给出可运行的验收方法。397 收藏 -
多个 Goroutine 并发执行时,errgroup 可以把首个错误、兄弟任务取消和统一等待放进同一条收敛链。本文给出可直接改造的 Go 写法,并说明 Context 必须传到真正执行 I/O 的位置。397 收藏 -
Go TLS 握手失败时,先分开检查 TCP 连接地址、ServerName/SNI 和证书 SAN,再用 HandshakeContext 固定错误点、用 ConnectionState 读取证书链,最后在服务端记录 ClientHelloInfo.ServerName 定位虚拟主机选证书问题。397 收藏 -
Golang · Go问答 | 3星期前 | 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 收藏 -
Go 中 := 只有在同一块作用域且至少有一个新变量时才会复用旧 err。进入 if 等内层块后,同名 err 可能变成新变量,导致错误检查和返回值失真。396 收藏 -
Go 反射调用 Set 失败,先不要把问题归因于类型不匹配。ValueOf 的值拷贝通常不可寻址,指针解引用后才可能获得可设置值;未导出字段和 MapIndex 还有额外边界。本文用 CanAddr、CanSet、Elem 和最小示例快速定位。396 收藏 -
Go 的切片不能直接作为 map key,因为切片不是可比较类型。本文解释编译期限制、interface 动态键的 panic,并给出字符串、数组和结构体三种迁移方案。396 收藏 -
交叉编译后不要只看构建机上的 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 收藏