Go问答技术文章
-
io.Pipe 写入阻塞常与同步背压、消费者提前退出及关闭责任有关。本文给出一读一写的完整示例,说明消费失败如何关闭读端通知写端,并比较 Pipe、内存缓冲和有界队列的适用边界。468 收藏 -
Go url.URL.JoinPath 用于按 URL 语义组合路径段,会处理多余斜杠和点段,但不负责查询参数、文件路径或权限校验。本文结合代码说明 Path、RawPath、EscapedPath 与 RawQuery 的边界,帮助你安全地拼接 HTTP URL。468 收藏 -
encoding/json/v2 默认拒绝 JSON 对象中的重复成员名,因为不同实现可能对重复值采用不同合并规则。本文对比 v1 与 v2 的语义,演示 AllowDuplicateNames 的兼容边界,并给出上游修复与局部适配方案。467 收藏 -
Excelize 的 StreamWriter 写完行并不等于工作表流已经结束。本文把 SetRow、Flush 和 SaveAs 放在同一条边界线上解释,说明为什么 Flush 必须位于每个工作表的流式写入末尾,以及 AddTable、递增行号、普通模式混用和大数据量临时文件等容易混淆的地方。467 收藏 -
bufio.Reader.Peek 返回长度不足时,不能只看切片长度或直接索引请求位置。本文区分 ErrBufferFull、EOF 和底层错误,说明 Peek 不推进读取位置的边界,并给出复制预览结果、再用 io.ReadFull 消费固定长度的处理方式。467 收藏 -
encoding/json v1 解码到结构体时会优先精确匹配,也接受大小写不敏感的字段匹配,因此 JSON 键大小写不同仍可能填充结构体字段。本文解释标签、map、DisallowUnknownFields 与严格键名预检的边界,并说明 v2 的差异。467 收藏 -
Go context 取消后下游查询仍在继续,通常不是取消函数失效,而是信号没有传到查询 API,或数据库驱动没有实现可取消路径。本文用 QueryContext、rows 生命周期和驱动边界逐层排查。467 收藏 -
讲清 Go io/fs.Sub 如何把嵌入文件系统的子目录映射为新根,并结合 fs.ValidPath、fs.ReadFile 与业务白名单处理路径边界;同时说明它不是符号链接安全沙箱。466 收藏 -
Go csv.Reader 的 LazyQuotes 会放宽普通字段中的裸引号和带引号字段中的非双写引号,但不会自动修复字段数、分隔符或业务数据质量。本文按兼容入口、严格边界和回滚路径说明如何安全使用。466 收藏 -
Golang · Go问答 | 4星期前 | channel · golang · select · 并发编程 · 性能排查 · channel default分支 忙等 time.Ticker context取消 Go select
本文解释 Go select 的 default 分支为何会把阻塞等待变成高频轮询,并分别给出移除 default、加入 Context、使用 Ticker、封装单次非阻塞尝试及处理关闭通道的改法。465 收藏 -
Go url.Parse 会把路径保存为解码后的 Path,原始的 %2F 等编码可能只保留在 RawPath 提示中。本文用 EscapedPath 说明如何稳定输出有效的原始路径编码,并处理提示失效的边界。465 收藏 -
Go netip.Addr.Next 在最大 IPv4 或 IPv6 地址之后返回零值 Addr,这是没有后继地址的正常语义。本文说明如何用 IsValid 识别边界并安全结束地址池遍历。465 收藏 -
charmap 是 8-bit 字符集编码器,无法覆盖所有 Unicode rune。本文说明如何用 EncodeRune 判断单个字符,用 Encoder 识别整段转换的错误边界,并选择拒绝、替代或 HTML 转义策略。465 收藏 -
Go Kong 同时设置 required 与 default 时,合法默认值也能满足必填。本文结合固定版本源码,说明显式输入、空字符串和业务校验的区别及改写方法。465 收藏 -
Go 的 float64 可以作为 map key,但 NaN 不等于自身,所以写入后的 NaN 不能按原值稳定查回。本文解释插入、查找、删除的边界,并给出规范化键的写法。465 收藏