Go问答技术文章
-
Go os.DirEntry.Info 获取的是目录项对应的 FileInfo,但条目在目录读取后被删除或重命名时可能返回错误;符号链接场景还要区分链接本身与目标。本文给出简洁的读取和错误处理边界。222 收藏 -
Gonum 的 Dijkstra 会拒绝可达负权重边,因为负边会破坏其贪心确定性。本文解释 panic 的原因,并演示如何用 BellmanFordFrom 处理负权边与负环。222 收藏 -
Golang · Go问答 | 21小时前 | 错误处理 · go · Context · Go context errors.Is context.DeadlineExceeded context.Canceled
Go 返回上下文错误时,不要比较错误字符串。用 errors.Is 区分主动取消与截止时间耗尽,再按需用 ctx.Err 和 context.Cause 保留请求边界与业务原因。222 收藏 -
在 Go 的 log/slog 中,带 key 的 nil 属性不是空 Attr。本文拆开 slog.Value 的零值、KindAny、Resolve 和自定义 Handler 的输出策略,说明如何保留 key=null、何时丢弃空 Attr,以及 typed nil 需要注意什么。222 收藏 -
Go regexp 匹配中文异常,通常不是 UTF-8 失效,而是把 ASCII 字符类、过窄的码位范围或字节下标当成了 Unicode 规则。本文用 \p{Han}、\w、\b 和 rune 示例拆开边界,给出可直接套用的排查方式。221 收藏 -
Go HTTP/2 请求遇到 stream reset 时,先根据 Response 是否存在判断响应头是否到达,再把 StatusCode 与 Body.Read 错误分开记录,最后结合幂等性决定重试。221 收藏 -
Go bytes.CutLast 找不到分隔符时应直接判断 found,而不是依赖 before 或 after 的长度。本文说明未命中、末尾命中、空分隔符、原始切片和 Go 版本边界。221 收藏 -
Go bufio.Reader.Buffered 返回的是当前缓冲区可以直接读取的字节数,不是底层缓冲区总容量,也不是文件或网络流的剩余长度。本文用 Read、Discard、Reset 对比说明它的实际含义。221 收藏 -
Go泛型方法调用受约束承诺限制。本文用批量提取名称的示例解释值接收者、指针接收者与接口准入,比较多类型模块接入中的能力接口、切片选择和nil边界。221 收藏 -
csvutil 遇到 CSV 表头缺少结构体字段时,默认会保留字段零值;若业务要求表头完整,可打开 DisallowMissingColumns,让 Decode 返回 MissingColumnsError。本文还区分行字段缺失与表头缺失,并给出宽松导入、严格导入和多余列处理方案。220 收藏 -
Go goroutine 泄漏后不会被 GC 自动结束,通常是 channel、锁、WaitGroup 或 I/O 缺少可达的退出条件;本文从阻塞栈定位并用 context、关闭 channel 和 WaitGroup 修复。220 收藏 -
Go Ticker.Stop 不会关闭通道或结束工作协程。通过周期任务示例区分停止节拍、请求取消、等待完成与移除引用,并说明 Go 1.23 回收行为的适用范围。220 收藏 -
用一个可落地的 Go 基准示例说明 RunParallel 的全局计时边界、goroutine 局部状态初始化、pb.Next 分工和 ns/op 结果口径。220 收藏 -
filepath.Glob 返回空结果不一定是模式写错:无匹配时 err 为 nil,模式语法错误时才会返回 filepath.ErrBadPattern。本文给出区分两类结果的写法,并补充跨平台路径和文件系统错误边界。220 收藏 -
从 DNS 解析与 TCP/TLS 建连的分层排查开始,使用 net.Resolver 配置自定义 DNS 连接,并把它接入 http.Transport。219 收藏