-
Go HTTP 客户端收到响应后如果忘记关闭 Response.Body,Transport 可能无法复用持久连接,循环请求中就会出现空闲连接变少、重复建连和资源占用升高。本文按错误分支、读到 EOF、Client/Transport 复用三个层面给出排查和修复方式。
-
Go HTTP 请求返回 EOF 时,先按 Client.Do、Response.Body 读取和 JSON 解码三个阶段定位,再结合状态码、正文长度和接口契约区分服务端连接提前结束、空响应、传输截断与解析失败。
-
bytes.Buffer.String 返回调用时未读部分的字符串,后续 Write、Read、Reset 不会修改已经取出的 string。本文对比 String、Bytes 和 strings.Builder 的内容范围、生命周期与适用边界。
-
Go 的 panic 和 recover 只作用于当前 goroutine 的调用栈。本文解释外层 recover 为什么接不到子 goroutine 的 panic,并给出在 goroutine 内部恢复、传递错误和选择 error 的实用写法。
-
Go 类型断言的单值写法在目标类型不匹配时会 panic。本文用 comma-ok 形式、nil 边界和 type switch,说明怎样安全处理接口中的动态类型。
-
Go 指针接收者方法能否由值变量调用,取决于方法集和可寻址性。本文用方法集、接口实现与函数返回值边界解释报错原因,并给出接收者设计建议。
-
Go regexp.Regexp.FindReaderIndex 用 io.RuneReader 搜索流式输入时,返回值是匹配区间的字节偏移而不是字符下标。本文说明 m[0]、m[1]、nil 和超前读取的含义,并给出选择其他 API 的边界。
-
Go sync.Cond 的 Signal 和 Broadcast 只是唤醒等待者,不能替代共享条件本身。本文用一个受 Mutex 保护的队列状态说明为什么 Wait 必须放在 for 条件循环中,以及如何在状态更新后选择 Signal 或 Broadcast,避免先检查后等待、误用 if 和忘记解锁。
-
Go crypto/ecdh.NewPublicKey 会按指定曲线校验公钥字节并返回 PublicKey。本文说明 NIST 曲线与 X25519 的编码边界、解析错误处理,以及如何在 ECDH 前保证本地私钥和对端公钥使用同一条曲线。
-
Go bytes.Buffer 读取后 Len 会变小,但 Reset 仍能让同一个对象继续写入。本文拆开读取位置、未读切片、底层存储和复用边界,帮助你避免把 Bytes 返回值保存过久。
-
在 Go 中,for range 遍历结构体切片时,值变量通常是当前元素的一份复制品。直接修改 item.Name 只会改变这份副本,原切片不会变化。本文用排查清单拆开 range 的赋值语义,并给出索引修改、显式写回和指针切片三种写法。
-
Go 的 debug/elf.File.Section 用节区名称查找 ELF 中的单个 Section,找不到时返回 nil。本文从打开文件、按名称定位、读取元数据与内容几个环节说明 Data 和 Open 的区别,并补充 SHT_NOBITS 与压缩节区的边界。
-
比较Go database/sql结果集的自动关闭、defer和显式关闭,区分QueryContext、Scan、Err、Close的错误入口,用完整读取函数处理早退、迭代失败和关闭错误。
-
用 Go net/http 提供静态文件时,http.FileServer 不会替你决定 Cache-Control。本文通过 handler 包装器区分带 hash 的资源和 HTML 入口,讲清缓存头与条件请求的职责边界。
-
用 Go database/sql 调用带 OUT 或 INOUT 参数的存储过程时,掌握 sql.Out、Dest 和 In 的绑定关系,配合 ExecContext 与驱动能力排查,避免输出值无法回写。