Go语言技术文章
-
bufio.Reader.ReadString 读不到分隔符时,可能返回已经读到的字符串和 io.EOF。本文用返回值边界、最后一段处理和读取循环说明如何避免丢数据、误报错误与死循环。470 收藏 -
QueryContext 超时并不自动等于连接损坏。本文从 QueryContext、Rows、驱动取消接口和 ErrBadConn 四层判断连接是否还能安全回到连接池。270 收藏 -
通过 go mod why 的包级、模块级和 -vendor 查询,理解依赖路径范围,避免把解释命令误当成清理或版本选择命令。420 收藏 -
从 Go string 与 C char 指针的表示差异出发,说明 C.CString、C.GoString、C.GoStringN 的选择、C.free 的释放责任,以及异步保存指针时的生命周期边界。432 收藏 -
围绕 go mod why 常见报错,区分包路径与模块路径,确认主模块位置,并结合 go list、go mod graph 和 replace 配置定位依赖引入原因。370 收藏 -
在 Go 的 cgo 代码里,C.GoString 适合读取以 NUL 结尾的 char*,C.GoStringN 适合长度明确的数据;反向使用 C.CString 时还要释放 C 堆内存。本文用一个小示例把三种边界讲清楚。155 收藏 -
用 go mod why 按包或模块读取从主模块到目标依赖的最短导入路径,理解 -m、-vendor、未引用提示与 go mod graph 的边界。103 收藏 -
围绕 httptest.ResponseRecorder 说明 Handler 响应测试的边界,演示 Result、Code、Header 和 Flushed 的正确检查方式,并比较何时应该使用 NewServer。217 收藏 -
用明确的 Go 包路径配合 go test -race,只检查目标包的竞态测试;同时区分 -run、./...、依赖编译和 -count=1 的作用边界。349 收藏 -
使用 httptest.ResponseRecorder 测试 Go HTTP handler 时,Code 可能因 recorder 的创建方式和写入时机呈现不同结果。本文用最小示例解释 Code、Result().StatusCode、Header 与 Body 的读取边界,并给出稳定的排查清单。219 收藏 -
go test -race 出错时,先确认是运行时竞态、普通测试失败还是平台不支持,再沿着 Read by、Previous write 和 goroutine 创建栈定位共享状态,修复后用 -count=1 复查。343 收藏 -
用 httptest.ResponseRecorder 测试 HTTP handler 时,优先通过 Result() 读取最终状态、响应头和响应体;本文解释 Code、StatusCode、Header 快照以及常见断言边界。488 收藏 -
go test -race 不负责提供共享变量读取接口,而是报告并发读写之间缺少同步的路径。本文用最小示例说明如何定位 Read/Write 栈,并选择互斥锁或原子读取修复。414 收藏 -
Go 测试中的 testexit 不是常规公开参数。本文比较 os.Exit、runtime.Goexit、t.FailNow、t.SkipNow、TestMain 和 -timeout 的退出范围,帮助你把失败、跳过、进程退出与资源清理分开处理。436 收藏 -
Go testing.T.Cleanup 的关键不是把回调写在哪里,而是看它注册到哪个测试作用域以及登记顺序。本文解释同一 T 上的 LIFO 规则、父子测试边界、资源依赖登记方式和并发注册的排查方法。498 收藏