Go问答技术文章
-
Go 中 defer 后修改变量却打印旧值,通常是因为参数在 defer 登记时已经求值。本文用最小示例区分参数快照与闭包读取,并给出日志、循环和命名返回值的选择方法。210 收藏 -
Go context 创建派生上下文后应尽快调用 cancel。本文解释 WithTimeout 的定时器和父子关系为何需要主动释放,并给出函数、循环、goroutine 的安全写法。112 收藏 -
Go 的 time.After 每调用一次都会得到一个新的定时器通道。循环中高频调用会增加定时器和分配开销,但 Go 1.23 起不再引用的未停止定时器可以被回收;需要反复等待时应改用可复用的 time.Timer。345 收藏 -
Golang · Go问答 | 5天前 | JSON · Go问答 · 接口测试 · Go JSON测试 map比较顺序不稳定 encoding/json测试 reflect.DeepEqual比较JSON cmp.Diff用法
Go JSON 测试失败不一定是数据变了,map 遍历顺序、JSON 成员排列与字节级快照是三个不同问题。本文用反序列化、reflect.DeepEqual 和 cmp.Diff 说明稳健的比较方式。397 收藏 -
Go 的 httptest.NewServer 关闭后仍有连接,通常要分别处理 Server、Response.Body 和 Client/Transport。本文用最小测试示例说明读取关闭响应体、关闭服务端和回收空闲连接的正确边界。419 收藏 -
解释 Go httptest.ResponseRecorder 为什么常见 200,梳理 NewRecorder 初始值、Write 的隐式状态、WriteHeader 首次生效和 Result().StatusCode 的稳定断言边界。125 收藏 -
go list -m all 展示的是模块构建列表,不等于某个目标包实际编译进二进制的全部依赖。本文从模块模式、vendor、workspace、构建条件和二进制 BuildInfo 五层排查版本不一致。490 收藏 -
Go 私有模块报错时,GOPRIVATE、GOPROXY、GONOPROXY 与 GONOSUMDB 解决的不是同一件事。本文从实际生效配置、报错位置和企业代理场景拆分排查路径。193 收藏 -
Go module checksum mismatch 不要先删 go.sum。本文通过 go mod download -json、go.sum、GOSUMDB 与 GOPROXY 对照,判断是内容变化、代理缓存还是私有模块配置边界。328 收藏 -
Go 用 unsafe.String 把可变字节缓冲区借用成字符串后,如果原切片被复用、写入或提前失去生命周期约束,字符串读取时就可能偶发乱码。本文按触发条件定位原因,并给出安全的复制写法。158 收藏 -
整理 reflect.Value.IsNil 支持的 Kind,解释无效 Value、typed nil 与空切片的差异,并给出带 Kind 白名单的安全封装。277 收藏 -
Go copy 没有复制出数据,常见原因是目标切片只有 cap 没有 len。本文解释 copy 的复制边界,并给出覆盖、追加和回归检查的正确写法。243 收藏 -
Go 切片的二索引写法可能保留底层数组尾部容量,append 会意外覆盖相邻数据。本文用 full slice expression 限制 cap,说明三索引规则、扩容边界和常见误区。406 收藏 -
Go 普通 map 不能直接承受并发读写,运行时 panic 只是可能出现的表现。本文用一个小缓存说明 map 并发边界,比较 RWMutex 与 sync.Map,并把 go test -race 放进回归验收。354 收藏 -
Go 泛型接口报错时,关键不是调用语法,而是类型参数的实际方法集。本文用 Buffer 和 Sink 示例说明 T 与 *T 的差异、编译期断言及指针接收者的取舍。396 收藏