Go语言技术文章
-
Go 1.23 起,失去引用的 time.After 定时器可以被回收,但高频循环每轮创建 timer 和 channel 仍有分配与调度成本。本文说明 time.After 的适用边界,以及如何用可复用 Timer 配合 Stop、排空和 Reset。501 收藏 -
Go 1.27 引入 encoding/json/v2 后,omitempty 的判断边界值得提前检查。本文按字段类型区分 Go 零值与 JSON 空值,给出 omitzero、兼容选项和契约测试的迁移路径。379 收藏 -
Go 用 io.CopyN 从网络连接复制固定块时,完整条件不是只看错误是否为空;本文说明如何设置 SetReadDeadline,结合 written、io.EOF 和 os.ErrDeadlineExceeded 处理半包、总时限与空闲超时。447 收藏 -
更换 embedding 模型时,先读取新旧模型的真实向量维度,再用模型版本、维度和距离度量建立双索引迁移边界,最后通过小批量回填验证后切换查询路由。498 收藏 -
Go select 没有 default 并不是异常:当所有通信 case 都暂时不可执行时,当前 goroutine 会等待;本文区分缓冲、关闭和 nil channel,并给出 default、超时与取消的选择方法。427 收藏 -
使用 Go io.CopyN 写归档文件时,不能只看目标文件是否存在;本文用 written、err、临时文件和 Stat 组合确认目标长度,避免把部分归档误当成功。470 收藏 -
Redis Sorted Set 的相同 score 并不是无序的:member 会按字节序形成确定的次序。本文从 ZRANGE、REV、LIMIT 出发,解释偏移分页的风险,并给出复合游标、快照键和分数变化时的稳定分页方案。349 收藏 -
Go select 同时命中多个 ready case 时不会按书写顺序执行,而是从可继续的通信中选择一个。本文解释 ready、default、关闭通道和优先级改写之间的边界。225 收藏 -
解释 Go io.CopyN 返回 ErrUnexpectedEOF 的真实来源:普通短源输入通常是 io.EOF,而底层 Reader 已报告结构化数据截断时,CopyN 会保留该错误。文章给出 written、err、ReadFull 和调用方兼容处理的判断方法。199 收藏 -
解释 MySQL 同表 OR 条件何时可能采用 Index Merge,带你从 EXPLAIN 的 type、key、rows、Extra 判断 union 与 sort_union,并通过单语句对照实验评估是否值得保留。373 收藏 -
用月光海岸与玻璃潮汐做一组 9:16 手机壁纸,讲清顶部锁屏时钟留白、主体位置、双语提示词、构图变体和裁切适配方法。433 收藏 -
Go 的 range 接收循环不会因为暂时没有值就结束,必须等 channel 被关闭并且关闭前发送的值全部取出。本文说明关闭责任、双值接收、nil channel、缓冲 channel 和多发送方协调的边界。238 收藏 -
农场采购肥料、农药等农业投入品时,用统一批次编号串联采购凭证、合格证明、库位和田间使用记录,方便验收、追查和异常隔离。396 收藏 -
Go 服务端处理上传或请求体时,通常先用 MaxBytesReader 设定请求级上限,再用 io.LimitReader 限制一次业务读取;本文解释两者的错误、关闭和超限判断差异。281 收藏 -
Fetch 的 Response body 是一次性可读流。response.json() 消费后,response.text()、blob() 或第二次 json() 都可能因 body 已使用而失败。本文解释 bodyUsed、clone 和单次解析的边界,给出可维护的响应处理方式。323 收藏