Go语言技术文章
-
Golang · Go问答 | 1星期前 | channel · 并发编程 · Go问答 · 异常排查 · range Go channel WaitGroup close 生产者退出 done channel
Go 的 range channel 结束,只能证明 channel 已关闭且数据已读空,不能单独证明生产者 goroutine 已经退出。本文用唯一关闭者、done channel 和 WaitGroup 拆开数据结束与生产者清理,说明零值读取、nil 阻塞和发送 panic 的边界。176 收藏 -
fs.ValidPath 并不会因为反斜杠本身判定路径非法。本文拆开 io/fs 逻辑路径、Windows 本地路径转换和文件系统实现三层边界,说明如何正确处理跨平台路径。445 收藏 -
Go 的 recover 只能在同一 goroutine 正在展开的 defer 中直接调用。本文把 panic 转成可返回、可记录的 error,并说明后台 goroutine 的恢复边界与常见误区。388 收藏 -
Go exec.CommandContext 超时后,不要用 cmd.Process 非空判断进程存活。本文用 Run/Wait、ctx.Err、ExitError 和 ProcessState 区分取消原因、直接子进程终态、输出采集与资源回收边界。364 收藏 -
Golang · Go问答 | 1星期前 | goroutine · net/http · Go问答 · Go recover panic 连接中断 Request.Context HTTP handler
Go HTTP handler 出现 panic 时,外层 recover、net/http 默认恢复和客户端连接中断不是同一件事。本文用最小中间件说明 recover 的作用域、已提交响应的边界、Request.Context 取消信号,以及子 goroutine 如何单独处理 panic。339 收藏 -
Go 的 os/exec 使用 StdoutPipe 或 StderrPipe 时,真正容易卡住的通常不是少写一个 Close,而是读取未完成就 Wait,或子进程继承了输出管道。本文给出无手工管道和并发读取两种写法,并整理取消、错误处理与 EOF 排查要点。241 收藏 -
Go 中 recover 只记录 panic 而不改 named result,函数可能在异常后返回 nil 错误。本文用最小示例说明 defer、recover、named result 与 goroutine 边界,给出可复用的错误转换和排查清单。458 收藏 -
Go 的 os/exec 不需要把命令拼成一整行:将程序名和每个参数分别传入,带空格的路径就能保持完整,再按场景选择 Output、CombinedOutput 或 StdoutPipe,并用 Wait 完成回收。313 收藏 -
Go 返回接口值时,typed nil 会让接口看起来非 nil。本文用接口动态类型和值的关系,说明如何修正接口返回、error 成功分支和调用方复查。413 收藏 -
filepath.WalkDir 会访问符号链接这一项,但不会自动进入它指向的目录。本文用 DirEntry、os.Stat 和错误回调拆开链接本身、目标信息、失效链接与权限错误的处理边界。132 收藏 -
Go 类型断言返回 ok=true,只能说明接口里的动态类型匹配,不能证明断言得到的指针非 nil。本文用 typed nil 示例拆解接口值、断言结果和方法调用的边界,并给出 nil 与 error 的安全处理写法。103 收藏 -
使用 Go filepath.WalkDir 扫描目录时,先处理回调错误并记录 path,再用 SkipDir 控制目录过滤;本文还说明 DirEntry、符号链接和根路径失败的边界。162 收藏 -
解释 Go 中 typed nil 为什么会让 error != nil,演示如何拆分接口的动态类型和值,并给出无错误分支直接返回 nil 的修复写法。224 收藏 -
用 Go filepath.WalkDir 递归过滤指定扩展名文件,正确处理目录、符号链接、根路径失败和子目录读取错误,保留部分结果与错误清单。255 收藏 -
Go 泛型调用遇到 untyped constant 时,类型参数通常按默认类型推断,赋值左侧不会反向改变 P。本文用 MyInt 示例拆开推断、约束和显式转换的边界。259 收藏