Go问答技术文章
-
讲清 Go sql.Tx 回滚失败时如何保留原始业务错误,使用 errors.Join 组合异常,并区分 ErrTxDone 与 Commit 失败。106 收藏 -
Go database/sql 遍历结果集时,Rows.Next 返回 false 可能是正常耗尽,也可能是驱动或 context 错误。本文拆分 Scan、Rows.Err 和 Close 的职责,并给出可复用查询函数写法。263 收藏 -
Go 使用 sql.NullString 扫描可空文本列时,必须同时判断 String 和 Valid。本文用表格、代码和排查清单说明如何区分 NULL、空字符串与普通文本,并正确写回数据库。447 收藏 -
QueryContext 超时并不自动等于连接损坏。本文从 QueryContext、Rows、驱动取消接口和 ErrBadConn 四层判断连接是否还能安全回到连接池。270 收藏 -
从 Go string 与 C char 指针的表示差异出发,说明 C.CString、C.GoString、C.GoStringN 的选择、C.free 的释放责任,以及异步保存指针时的生命周期边界。432 收藏 -
在 Go 的 cgo 代码里,C.GoString 适合读取以 NUL 结尾的 char*,C.GoStringN 适合长度明确的数据;反向使用 C.CString 时还要释放 C 堆内存。本文用一个小示例把三种边界讲清楚。155 收藏 -
围绕 httptest.ResponseRecorder 说明 Handler 响应测试的边界,演示 Result、Code、Header 和 Flushed 的正确检查方式,并比较何时应该使用 NewServer。217 收藏 -
使用 httptest.ResponseRecorder 测试 Go HTTP handler 时,Code 可能因 recorder 的创建方式和写入时机呈现不同结果。本文用最小示例解释 Code、Result().StatusCode、Header 与 Body 的读取边界,并给出稳定的排查清单。219 收藏 -
用 httptest.ResponseRecorder 测试 HTTP handler 时,优先通过 Result() 读取最终状态、响应头和响应体;本文解释 Code、StatusCode、Header 快照以及常见断言边界。488 收藏 -
Go 测试中的 testexit 不是常规公开参数。本文比较 os.Exit、runtime.Goexit、t.FailNow、t.SkipNow、TestMain 和 -timeout 的退出范围,帮助你把失败、跳过、进程退出与资源清理分开处理。436 收藏 -
Go 测试出现 testexit、日志突然中断或清理回调未执行时,先区分 os.Exit、runtime.Goexit 与测试失败,再用子进程隔离验证退出码,并让 TestMain 保留 m.Run 的标准结果。387 收藏 -
Go 测试遇到 os.Exit 时,defer 和 t.Cleanup 不会执行。本文区分 os.Exit、runtime.Goexit 与测试失败路径,给出退出函数注入、子进程验证退出码和 TestMain 收尾的可维护做法。235 收藏 -
Golang · Go问答 | 3星期前 | 依赖管理 · 工程实践 · Go问答 · Go workreplace go.work replace作用域 Go多模块工作区 Go本地依赖替换 Go CI依赖解析
Go 没有 go workreplace 子命令,通常指 go.work 中的 replace。本文用 use、replace、GOWORK 和 go list -m 说明工作区成员、本地替换、版本范围与 CI 下游边界。140 收藏 -
go.work 与 replace 在 CI 中出错,通常要先确认工作区是否生效,再核对相对路径、module 声明和 require 关系,最后比较代理与私有模块环境。256 收藏 -
围绕 go.work 与 replace 规则,说明如何确认 workspace、写入本地替换、判断版本是否匹配,并用 go list 检查最终依赖目录。221 收藏