Go语言技术文章
-
Go io.Pipe 的写端提前失败时,普通 Close 会让读端只看到 EOF。本文按读写两端的职责解释 CloseWithError、n 与 err 的处理方式,以及关闭顺序和 ErrClosedPipe 的边界。148 收藏 -
Go 的 url.Values 会在 Encode 阶段统一转义查询参数。本文从重复编码现象出发,说明如何保留原始值、处理已有查询、识别外部已编码输入,并区分查询参数与路径转义。147 收藏 -
Go net/url 解析以问号结尾但没有参数的 URL 时,要用 ForceQuery 保留空查询标记;RawQuery 只表示查询内容,不能单独区分缺少问号和空查询。147 收藏 -
Go database/sql 中 rows.Next 返回 false 不一定代表结果正常读完,也可能是驱动在迭代阶段返回了错误。本文用原创读取模板拆开 Query、Scan、Close 和 Rows.Err 的职责,并说明多结果集与写入型结果集的处理边界。146 收藏 -
Go 结构体包含 Mutex 时,值接收者、按值参数与容器操作都可能复制锁。本文通过计数器说明指针传递、容器存指针、noCopy 的作用以及并发计数的判断方法。146 收藏 -
Go 提示 x509 未知机构时,服务端证书链齐全并不等于客户端信任。文章区分链材料与信任锚,定位 RootCAs、容器根库及TLS终止点,提供保留系统根并追加受控CA的专用客户端示例,说明安全修复边界。146 收藏 -
用 sync.Mutex 把共享状态的读取、条件判断和写回绑定在同一个临界区,避免并发复合更新中的竞争窗口、丢失更新和状态泄漏。145 收藏 -
Go 的 encoding/json 默认会忽略结构体未声明的 JSON 字段。本文用 Decoder.DisallowUnknownFields 在请求边界拒绝拼写错误,说明 json 标签、嵌套结构、单文档尾部检查和可演进事件的取舍。144 收藏 -
PATH 是多个路径组成的列表,不能用 filepath.Split 当作单一路径处理。本文对比 ListSeparator 与 Separator,说明 Go 中如何跨平台拆分 PATH,以及空输入、清理和绝对化的边界。143 收藏 -
Go 的 os.ReadDir 默认按文件名返回目录项;如果业务还要按修改时间排序,应先读取 DirEntry.Info,再用稳定排序保留文件名作为平局规则。本文给出可直接改造的实现和错误处理边界。143 收藏 -
Go 的 sync.Cond 不负责保存通知,真正需要等待的是受锁保护的共享谓词。本文从丢失唤醒的症状出发,说明为什么必须用同一把锁配合 for 循环检查条件,并给出 Signal 与 Broadcast 的选择方法。143 收藏 -
使用 Go mod graph 精确筛选目标模块的全部父依赖,并结合 go list -m 与 go mod why 区分版本要求、实际选中版本和包导入路径,说明依赖调整前后的记录方法与升级判断边界。142 收藏 -
使用 slices.IndexFunc 按谓词查找切片的首个匹配元素,重点说明索引返回值、未命中时的 -1,以及空切片的安全处理。142 收藏 -
Go filepath.Match遵循目标操作系统规则。本文通过反斜杠差异、单文件名筛选函数及预期用例,解释整串匹配、大小写和ErrBadPattern,并区分模式命中与跨平台文件名合法性。142 收藏 -
多个 Go 生产者共享 channel 时,由唯一协调者等待全部发送者退出后关闭输出。本文给出原创实现、固定负载基准入口,以及正常计数和取消收尾的观测边界。141 收藏