Go问答技术文章
-
bytes.Reader.Reset 会把读取器切换到新的字节切片,并把顺序读取位置带回新数据开头。本文用复用场景拆开 Reset、Read、Len、Size、ReadAt 与 UnreadByte 的边界,避免把读取位置和底层数据混在一起。147 收藏 -
io.LimitReader 遇到读取上限只会表现为 EOF,不能直接说明源数据是否超限。本文用多读一个哨兵字节和流式复制两种方式,区分完整、恰好到达上限与真正截断。126 收藏 -
Go 的 sync.RWMutex 允许多个读者并发,但写锁一旦排队,新读者也会等待。本文通过原创实验和指标拆分,分析写锁等待过久的常见竞争来源,并给出可落地的缩短临界区方法。501 收藏 -
Go sync.Pool 适合可重建临时对象,不能承担业务缓存的按键读取、过期与命中承诺。结合缓冲复用代码说明输出复制、归还后引用和容量控制。447 收藏 -
Go encoding/xml 的 InputOffset 返回当前解析器的字节偏移,既是最近返回 token 的结束位置,也是下一个 token 的起始位置。本文用流式 token 记录和错误上下文示例说明调用时机、字节与行列的区别,以及 UTF-8 和 EOF 边界。422 收藏 -
Go image.YCbCr 的 Cb 和 Cr 不是总与 Y 像素一一对应。本文用 COffset、SubsampleRatio、Rect.Min 和 CStride 说明下采样后的色度索引计算,并给出安全读取示例。217 收藏 -
Go flag.FlagSet.Visit 只遍历 Parse 后被用户显式设置的参数,适合记录命令行覆盖项;VisitAll 用于完整参数表,Lookup 用于单项查询。本文用配置覆盖和诊断日志场景说明三者边界。104 收藏 -
Go select 一旦包含 default,在没有可进行通信时就会立即执行。把它放进消费 for 循环会让循环持续重试,表现为 CPU 升高但没有有效消费。本文从故障症状、阻塞式修复、取消与关闭 channel 处理,到必须轮询时的退避边界,给出一套可直接套用的处理方式。456 收藏 -
Go HTTP 请求已经取消,但 Handler 仍不退出时,先确认 Context 信号,再按下游调用、channel、锁和响应写入逐层定位真正的阻塞点。229 收藏 -
Go BitString.RightAlign 将填充位放到返回字节的开头。通过五位和跨字节示例理解对齐,并处理共享内存、独立复制、位长保留及 DER 解析边界。378 收藏 -
Go 关闭 channel 触发 panic,通常是关闭责任没有收口:nil channel、重复关闭和向已关闭 channel 发送分别对应不同的生命周期错误。本文用发送方所有权、协调者收口和接收端 ok 判断整理排障与迁移边界。262 收藏 -
Go 循环中直接 defer file.Close 会把关闭动作推迟到外围函数返回。本文用单文件函数隔离资源生命周期,并说明读取错误、关闭错误和文件描述符复查边界。426 收藏 -
Go 中 goroutine 把结果发送到无人接收的 channel 时,发送操作可能永久阻塞。本文用 context 的取消分支修复泄漏,并用固定取消次数、goroutine 增量和资源边界说明何时该用缓冲区、何时必须让底层工作也支持取消。438 收藏 -
iter.Seq2 是 Go 1.23 引入的双值迭代器类型,range 左侧最多接收键和值两个变量。本文用 map、slice 和自定义迭代器说明绑定顺序、提前停止与 iter.Pull 的边界。190 收藏 -
Go ECDH 公钥接入时,应区分原始编码、PKIX DER 和 PEM 文本。本文用显式解析与类型分支说明 NIST 公钥对象转换,并解释为什么转换不会改变曲线。270 收藏