Go问答技术文章
-
Go 1.26 提供了实验性的 goroutineleak pprof 画像,可在构建时启用后观察疑似泄漏的 goroutine。本文从一个等待链问题切入,说明如何开启、采样、区分真实泄漏与暂时阻塞,并给出回归核对边界。428 收藏 -
CloseIdleConnections 只处理 Transport 中已完成请求、当前处于 keep-alive 空闲状态的连接,不会中断正在使用的连接。本文用可复现代码拆开它与 MaxIdleConnsPerHost、IdleConnTimeout 的边界。428 收藏 -
Golang · Go问答 | 1天前 | 性能优化 · Context · go并发 · 故障排查 · 接口开发 · Go goroutine泄漏 context.WithCancel 请求生命周期 defer cancel
调用 context.WithCancel 并不自动消除 goroutine 泄漏。关键在于 cancel 的调用位置、子协程是否监听 Done,以及请求提前返回时能否及时结束。本文从一个持续增长的接口现场拆出根因、修复和复查方法。427 收藏 -
以一个订单接口为例,拆开 Go 1.27 encoding/json/v2 的迁移步骤,核对字段标签、旧 JSON 兼容性、测试策略与可回滚边界。426 收藏 -
用 Go 的 http.Server.ConnState 观察连接从建立、活跃、空闲到关闭的状态变化,并结合超时和异常断开日志定位连接问题。425 收藏 -
Go 接收多种 JSON 事件时,不必一开始把所有 payload 解成 interface{}。用 json.RawMessage 保留原始 JSON,再按 kind 分流解析,可以减少无效结构体和类型断言;但它仍然持有字节数据,不能替代大小限制、深拷贝和错误校验。421 收藏 -
strings.TrimSpace 不只处理 ASCII 空格,它按 Unicode 空白规则裁掉字符串两端字符。本文用最小实验拆开 TrimSpace、unicode.IsSpace 与 TrimFunc 的关系,并给出字段清洗时的边界做法。420 收藏 -
runtime/metrics.Read 只负责把运行时指标写入 Sample 的 Value。本文用动态发现、类型判断和采样快照说明如何稳定读取,避免把指标描述、样本槽位和 Value 类型混为一谈。418 收藏 -
Go 的 regexp.FindAllStringSubmatchIndex 返回的是每个匹配和捕获组的字节偏移,不是字符下标。本文用中文输入、空捕获组和 ExpandString 拆开它的返回结构与边界。414 收藏 -
Go 接口如果只返回一段错误字符串,调用方很难判断应该重试、提示用户还是修复参数。本文从订单查询接口的真实场景出发,设计可演进的结构化错误、参数语义、错误映射和兼容策略。413 收藏 -
Go 的 io.ByteScanner.UnreadByte 不是通用回退栈:它只约定回退最近一次成功的 ReadByte。本文用 token 读取示例说明连续回退、其他读取操作和 EOF 后的状态边界。412 收藏 -
sort.Search 找不到目标时返回 len 并不是越界,而是把第一个满足条件的位置定义为插入点。本文用单调谓词、边界表和可运行代码说明闭区间、找不到与插入位置的关系。411 收藏 -
Go 写文件时,os.File.Sync 成功并不等于包含它的目录项也完成持久化。本文用临时文件、重命名和目录同步的完整流程,说明崩溃恢复时该看哪些边界。410 收藏 -
Golang · Go问答 | 20小时前 | 并发 · 日志 · 单元测试 · testing · Go问答 · Go 并行测试 测试日志 testing.TB.Output fmt.Println
Go 1.25 为 testing.T、B、F 增加了 Output 方法。它把 io.Writer 接到同一条测试输出流,保留测试归属和内部缓冲,适合替代 fmt.Println 记录并行测试日志。本文拆开调用链、换行刷新和生命周期边界。408 收藏 -
用一个可运行的 Go 示例拆开 reflect.Value 的 CanSet、CanInterface 和 MethodByName 边界,说明什么时候会 panic,以及如何在反射入口先做类型、有效性和可导出性检查。407 收藏