Go语言技术文章
-
context.WithDeadlineCause 超时后,ctx.Err() 通常只返回 context deadline exceeded,具体原因要用 context.Cause(ctx) 读取;本文同时说明提前 cancel 和父上下文先取消时的边界。205 收藏 -
Go fs.Sub 出错时,先区分路径格式错误和子目录访问错误:用 fs.ValidPath 检查 dir,再用 fs.Stat 确认目标存在且是目录,并通过 PathError 与 errors.Is 定位真正失败的操作。276 收藏 -
Go Context 的 Deadline 返回绝对时间和 ok 标志。本文用代码说明如何读取截止时间、换算剩余预算,并区分超时、取消与父子 Context 的期限边界。246 收藏 -
Go select 加 default 可以做一次非阻塞检查,但不应把它直接放进无节制的循环。本文用状态返回、阻塞等待、ticker 和 context 取消四种边界,说明 default 的适用范围与常见误区。117 收藏 -
filepath.WalkDir 会发现符号链接,但默认不会沿着链接目标递归。本文用 DirEntry 判断链接类型,并说明需要跟随时如何解析目标、限制范围和避免循环扫描。359 收藏 -
Go select 中 default 被选中通常不是分支抢先,而是其他通信 case 当下都无法立即完成。本文按 nil 通道、缓冲状态、发送接收配对和循环忙轮询逐层排查,并给出可落地的修正方式。370 收藏 -
filepath.WalkDir 的错误不只来自文件本身。本文按根路径、目录读取和子项回调三类入口,讲清 d 为 nil、SkipDir 与 SkipAll 的处理边界。460 收藏 -
Go 的 select default 只负责非阻塞选择,不负责等待取消。本文用 worker、ctx.Done、关闭 channel 和 ok 判断说明正确处理取消信号的方法。318 收藏 -
filepath.WalkDir 的回调参数是 fs.DirEntry,不是旧版 Walk 的 fs.FileInfo。本文说明 Type、IsDir 和 Info 的区别,演示如何判断目录、普通文件、特殊文件与符号链接,并处理 Info 失败和遍历错误。401 收藏 -
Go 的 range channel 不会自行判断生产完成,只有通道关闭并读完已发送值后才会结束。本文用发送方、协调者和消费者三种责任划分,说明多生产者安全 close、取消退出以及常见死锁的排查方法。242 收藏 -
Go url.JoinPath 适合拼接已经转义的 URL 路径元素,但不会替业务判断用户权限。本文说明如何限制用户值为单一路径段,并处理函数版、方法版、路径清理和 %2F 边界。232 收藏 -
Go 的 for range channel 一直等待不退,通常与未关闭、nil channel、发送端阻塞或关闭责任混乱有关。本文用最小示例说明排查和修复方法。185 收藏 -
Go url.JoinPath 会自动清理路径中的多余斜杠,但 https:// 的双斜杠是协议分隔符。本文从路径拆分、PathEscape 和 EscapedPath 三个角度排查异常拼接。344 收藏 -
Go 的 channel range 只有在通道关闭后才会退出。本文从单发送者、多发送者和接收端提前退出三个场景说明 close 的责任边界,避免 range 卡住与 send on closed channel。105 收藏 -
用 Go 的 url.JoinPath 组装 API 路径,讲清路径段转义、查询参数、URL 对象转换、清理规则和常见坑。339 收藏