Go问答技术文章
-
Golang · Go问答 | 2天前 | 标准库 · 错误处理 · 文件读取 · Go问答 · 排错 · Go bufio.Scanner errors.Is errors.As ErrTooLong Scanner.Err 文本读取
bufio.Scanner 的 Scan 返回 false 不一定代表读取失败,io.EOF 会被 Err 隐藏为 nil。本文按 Reader、SplitFunc 和缓冲区三类来源拆分错误,并用 errors.Is、errors.As 识别哨兵错误、PathError 与 ErrTooLong。428 收藏 -
ScanComments 负责识别注释,SkipComments 决定识别后是否跳过。本文用一个小型 text/scanner 工具说明两者组合,并区分 go/scanner 的 API 边界。428 收藏 -
Go net/http.Transport 资源没有释放时,先检查 Response.Body 是否关闭并区分活动连接与空闲连接,再用连接池参数和生命周期清理控制资源回收。424 收藏 -
Go runtime.KeepAlive 只负责在指定调用点保持对象可达,不会修复数据竞争或非法指针。本文按资源句柄、终结器、unsafe/cgo 与并发边界拆解结果不稳定的排查方法。423 收藏 -
Go test 命中缓存时会显示 (cached)。本文说明 -count=1 如何只对当前命令强制重新执行测试,并区分 -run、go clean -testcache、构建缓存和缓存决策诊断。421 收藏 -
围绕 Go sync.Pool 升级后命中率、对象身份和延迟变化,建立可重复的小实验,区分 API 契约、垃圾回收和业务所有权问题,并给出是否继续池化的判断清单。420 收藏 -
Go SetEscapeHTML(false) 适用于需要可读字符的独立 JSON 输出。通过完整示例区分字节表示与解析值,并说明 JSON 必要转义、末尾换行、二次编码及固定字节契约的边界。420 收藏 -
Go net/http.Transport 返回 error 时,先区分 HTTP 响应与传输失败,再沿错误链识别取消、超时、连接和 URL 原因,并据此安排日志与重试。419 收藏 -
crypto/subtle.XORBytes 会按两个输入切片的较短长度写入,但输入长度不一致并不是普通截断场景。本文结合官方文档说明 dst 长度、输入长度、返回值和切片重叠的边界。418 收藏 -
Go runtime/trace.NewTask 为跨函数、跨 goroutine 的逻辑工作流创建携带 task 的 context,再用 Log、WithRegion 和 Task.End 组织执行追踪。本文只讲任务边界、上下文传播和结束时机,不展开 pprof 性能剖析。411 收藏 -
Golang · Go问答 | 11小时前 | 标准库 · TCP · Go问答 · Go keepalive net.TCPConn KeepAliveConfig SetKeepAlive SetKeepAlivePeriod TCP排障
排查 Go net.TCPConn 的 KeepAlive 参数未生效时,先区分开关、空闲时间、探测间隔与应用层超时,再核对 TCPConn 类型、API 返回错误、Dialer 或 ListenConfig 的配置来源和操作系统边界,并给出旧版本与 Go 1.23+ 的正确写法。406 收藏 -
用 Go io.ReadFull 读取固定长度协议帧,区分正常 EOF、半包 ErrUnexpectedEOF 与底层 I/O 错误,并给出长度校验和循环读取示例。405 收藏 -
go mod tidy 失败时,先按模块路径、版本选择、代理下载和本地文件四类原因分流,再用 go list、go env 和文件 diff 缩小范围。本文给出可重复的排查命令,以及修复后的干净回归方法。404 收藏 -
Go 工具链在目录、终端和 CI 中选择不同版本时,如何核对 PATH、GOTOOLCHAIN 与项目声明,控制执行来源并记录实际版本。404 收藏 -
sync.Map.CompareAndSwap 返回 false 不会指出改写者,也不提供失败时的旧值。通过可比较结构体携带版本、写入者与操作标识,并区分后续 Load 观察、键删除及类型差异,避免错误归因。403 收藏