-
Go sync.Mutex.TryLock 返回 false 代表没有获得锁,不代表锁已经解锁。本文用最小代码说明成功分支的 defer Unlock、失败分支的直接返回,以及 TryLock 的兼容与使用边界。
-
Go 反射遍历 map 时,MapIter.Value 会返回当前元素的 reflect.Value;Value.SetIterValue 可以在目标 Value 可设置且类型可赋值时直接接收当前值,避免额外构造一个 Value。本文给出复制循环、边界条件与回退清单。
-
在反射构造切片时,reflect.Value.Grow 可以提前保证追加空间,但它只接受可设置的 Slice Value,不改变切片长度。本文从批量映射场景出发,梳理 Grow 与 append、SetLen 的职责,以及 Kind、CanSet、负数参数和容量溢出的 panic 边界。
-
Go database/sql/driver.Validator 的 IsValid 只返回布尔值,不会直接返回 ErrBadConn。本文结合连接归还池的时机,说明 false 如何让失效连接被丢弃,以及 ErrBadConn 何时才适合交给 database/sql 触发新连接重试。
-
PATH 是多个路径组成的列表,不能用 filepath.Split 当作单一路径处理。本文对比 ListSeparator 与 Separator,说明 Go 中如何跨平台拆分 PATH,以及空输入、清理和绝对化的边界。
-
Go os.Pipe 的读端提前关闭后,写端继续写入可能得到 broken pipe。本文从两端关系、关闭时机、错误分类和子进程通信场景说明原因,并给出可复用的处理策略。
-
本文从 database/sql 的调用路径出发,区分 sql.DB.Ping、PingContext 与 driver.Pinger.Ping 的职责,说明驱动怎样报告失活连接,以及应用如何把超时和单连接错误接回连接池策略。
-
Go 用 bufio.Writer.ReadFrom 复制大文件时,Reader 的短读通常不是错误,底层 Writer 的短写则必须通过 ReadFrom 和最后一次 Flush 的错误共同判断。本文按调用路径说明快速路径、缓冲区、io.ErrShortWrite 与 io.ErrNoProgress 的处理方式。
-
big.Int.SetString 的 base=0 会根据 0b、0o、0 或 0x 前缀选择实际进制;显式 base 则按固定进制读取文本。本文用 Go 示例区分两种模式、失败返回值和下划线边界。
-
math/big.Int.FillBytes 会把整数的绝对值写入调用方提供的字节切片;切片过短时高位会被截断。本文用 BitLen 预估容量,在固定宽度字段写入前拒绝不安全目标,并说明负数、零值和缓冲区复用边界。
-
Go 处理不可信图片时,先用 image.DecodeConfig 读取格式配置和宽高,再按 int64 像素预算决定是否进入 image.Decode,避免不必要的完整像素分配。
-
本文用一个只依赖标准库的 Go 小工具说明 pem.Block.Headers 如何写入自定义头字段,解释 pem.Encode 的稳定输出、错误处理、Decode 回读与测试夹具设计。
-
Go pem.Decode 找到 PEM 块后会返回结束标记之后的 rest;本文用前导空白、多个块和尾部文本说明消费边界,并给出可复用的循环读取写法。
-
Go io.MultiReader 只有在当前 Reader 返回精确的 EOF 时才会切换到下一个输入;遇到非 EOF 错误会先把错误返回给调用方,不会自动跳过当前 Reader。本文用连续 Read 示例说明 n、err 和 Reader 切换之间的关系。
-
Go strings.Reader 的 Read 会推进当前位置,而 ReadAt 按显式字节偏移读取且不会改变后续 Read 的位置。本文用 Len、Size 和短读错误说明两者的边界。