Go语言技术文章
-
Go 的 nil channel 不会就绪,因此放进 select 的收发分支永远不会被选中。本文用最小示例解释它与未就绪、已关闭通道的区别,并给出初始化、动态禁用和退出处理方案。128 收藏 -
Go 1.27 支持具体类型的方法声明自己的类型参数,但接口方法仍不能声明泛型参数。本文用 List 的转换 API 拆解哪些旧函数值得改成 generic method,以及接口、反射和升级检查的边界。237 收藏 -
用 Go 逐行解析简单配置文本:统一换行,跳过空行和整行注释,用 strings.Cut 保留值中的等号,并为格式错误与重复键返回行号。309 收藏 -
RAG 不应该把向量召回的所有片段直接塞进上下文。本文用 reranker 重排候选片段,再用 token 预算、单片段上限和来源去重装配最终上下文,给出可观测的参数与 Python 示例。281 收藏 -
Go 中重复关闭 channel 会触发 panic,向已关闭 channel 发送也会 panic,而从已关闭 channel 接收会返回零值。本文用状态表、单一关闭者、多生产者协调和 done 广播说明如何修复。359 收藏 -
Go bufio.Scanner 读取超长行时,关键是在第一次 Scan 前调用 Buffer 设置初始缓冲区和最大 token 大小,并为换行符预留空间;如果行长不可控或需要恢复,则应改用 bufio.Reader。100 收藏 -
Redis Stream 消费组里的 Pending 消息不是普通队列积压。本文用 XPENDING 判断空闲时间,再用 XAUTOCLAIM 认领超时消息,最后用 XACK 收口,并说明认领后的重复消费与幂等边界。494 收藏 -
Go map 并发读写没有立刻崩溃,不代表代码安全。本文用 -race 定位冲突,说明普通 map 的锁封装方式,并比较 sync.Map 的适用边界。374 收藏 -
MySQL JSON 列不能直接建立普通索引时,可以用生成列抽取稳定的标量值,再按正确类型建立索引。本文说明 JSON_EXTRACT、JSON_UNQUOTE、生成列和 EXPLAIN 之间的关系。401 收藏 -
用 PHP 的 Throwable、getPrevious() 和统一异常边界,把底层 PDO 错误留在服务端日志,同时向客户端返回安全、稳定的错误响应。203 收藏 -
讲清 Go 自定义 net.Resolver.Dial 的调用边界,使用同一个 net.Dialer 转发上下文、网络类型和 DNS 地址,并接入 HTTP Transport 保留请求超时与本地网络配置。122 收藏 -
Google 新加坡 2026 公告宣布向 AI Singapore 的 Project Aquarium 追加 100 万美元,改善东南亚数据集质量并推动开放源代码。本文区分公告事实与开发推断,说明模型、应用和企业数据团队如何核对语言覆盖、许可证、质量与评测条件。257 收藏 -
Go 动态查询不知道列数时,用 Columns 创建接收槽位,以 *any 安全处理普通值与 NULL,再结合 ColumnTypes 和 rows.Err 完成通用扫描。328 收藏 -
AI 推理服务的 p95、p99 延迟突然抖动时,不要只看 GPU 利用率。本文用请求、排队、输入处理、模型计算和输出处理的分段指标,结合并发与吞吐变化,判断瓶颈究竟在调度排队还是模型计算。462 收藏 -
Go DNS 查询超时后仍看到延迟,常见原因不是 context 失效,而是调用了不带 context 的包级函数、纯 Go 解析发生重试,或 cgo 底层阻塞调用尚未收尾。本文给出区分三种情况的排查与写法。229 收藏