-
Go 的 map 遍历顺序由语言规范明确为未指定,不能把某次输出顺序当成稳定结果。本文解释 range 的真实保证,并给出排序键后生成确定性输出的写法。
-
Go http.Cookie 的 RawExpires 只保存读取到的原始 Expires 文本,Expires 才是可用于时间判断和重新序列化的 time.Time。本文说明两者的关系、解析失败边界以及如何在代理和审计代码中正确使用。
-
textproto.Reader.ReadMIMEHeader 会读取以空行结束的 MIME 头,并把以空格或制表符开头的续行并入上一字段。同名字段按出现顺序保留;缺少冒号、首行缩进或非法头字节时返回协议错误。本文给出读取、排错和资源边界的实用写法。
-
Go database/sql 驱动只有在连接已确认失效且操作不可能重复执行时才应返回 driver.ErrBadConn。本文解释 database/sql 的重试边界、驱动实现位置,以及业务代码为什么要保留结果不确定时的原始错误。
-
bytes.Reader.Size 返回底层字节切片的原始长度,普通 Read 推进后它不会变化;真正表示当前未读数据的是 Len。本文用分段读取示例说明两个指标的区别,并给出进度计算、Reset 与 ReadAt 的边界。
-
Go math/big.Int.BitLen 返回绝对值的位长度,最少无符号字节数可按 (BitLen()+7)/8 估算。本文区分零值、负数、Bytes 变长编码与 FillBytes 固定宽度编码。
-
bytes.NewBuffer 会把传入的 []byte 作为初始缓冲区内容使用,不会替调用方自动复制。本文说明原切片修改为何会影响后续读取,以及如何用 bytes.Clone 或显式复制隔离数据。
-
Go io.ReadAtLeast 会根据已读字节数、min 和缓冲区长度返回不同结果。本文从固定长度读取故障出发,拆解短读、EOF、ErrUnexpectedEOF 与 ErrShortBuffer 的判断方式,并给出可复用的修复和防复发写法。
-
Go 中 *MyError(nil) 放进 error 接口后为何仍不等于 nil?本文用动态类型、动态值和可复制的排查代码说明原因,并给出正确返回方式。
-
Go database/sql 的 Conn.PingContext 可以检查一条已获取的专用连接是否仍然可用。本文说明 DB.Conn、超时 Context、PingContext 返回值和 Conn.Close 的正确配合,并区分全局连接池检查与单条会话检查。
-
Go netip.AddrFrom4 接收 [4]byte 并构造原生 IPv4 地址值。本文说明如何读取 String、Is4、As4,怎样处理 []byte 和文本输入,以及 IPv4-mapped IPv6、0.0.0.0 与零 Addr 的边界。
-
Go HTTP 客户端拿到响应后如果没有关闭 Response.Body,连接可能无法按预期复用,连续请求时会出现等待、变慢甚至连接资源耗尽。本文按请求体生命周期、连接复用和并发封装给出排查与修复方法。
-
Go httptrace.ClientTrace 可以在 GotConn 回调中记录连接是否复用。本文说明 Reused、WasIdle、IdleTime 的区别,以及同一个 http.Client、响应体关闭和 HTTP/2 场景下的排查边界。
-
Go http.Request.GetBody 不是当前请求体的别名,而是为客户端重定向或手动重试重新生成请求体的工厂。本文说明 NewRequest 何时自动填充它,以及自定义 io.Reader 如何保留可重放能力。
-
Go runtime.LockOSThread 只适用于依赖线程局部状态的操作系统服务或非 Go 库调用。本文说明判断条件、成对解锁、专用锁定 goroutine 以及不能恢复线程状态时的退出边界。