Go语言技术文章
-
用 Go net/http 实现文件上传时,同时处理请求体大小、multipart 内存边界、原始文件名清洗、扩展名校验和服务端存储名。254 收藏 -
Go 接口不等于 nil 时,问题通常不是 nil 比较失效,而是接口仍携带动态类型。本文用 typed nil、error 返回和类型断言示例,说明如何定位调用失败并修正返回边界。358 收藏 -
用 Go 的 encoding/csv 逐条读取大文件,处理固定或可变列数,记录 ParseError 的真实行列信息,并说明 ReadAll、ReuseRecord 和 LazyQuotes 的取舍。171 收藏 -
Go 反射读取结构体标签时,Get 的空字符串并不等于“标签缺失”。本文用 StructTag.Lookup 区分缺失键、显式空值与格式错误,并给出可诊断的封装写法。423 收藏 -
Go 的 range 读 Channel 不会因为暂时没有消息而结束,只有发送方关闭通道才会收到结束信号。本文从阻塞复现、单发送者关闭、多发送者协调和提前退出取消四个场景,整理一套不 panic、不泄漏的收尾方式。101 收藏 -
把 os.File 遍历迁移到 io/fs.FS 时,WalkDir 返回的是文件系统内部的逻辑路径。本文说明如何在交给外部工具前安全转换为操作系统路径,并列出跨平台回归检查点。386 收藏 -
短超时压测后 Goroutine 数量不回落,不一定都是 Context 失效。本文用 worker pool 拆开工作取消与结果发送两个等待点,给出可执行的 Go 修复写法和 pprof 定位方法。265 收藏 -
Go 错误一旦经过 fmt.Errorf 包装或 errors.Join 合并,直接比较和类型断言就容易失效。本文用 errors.Is、errors.As 和 Join 建立稳定的分类与诊断路径。184 收藏 -
CI 获取 Go 私有模块失败时,不要只把 GOPROXY 改成 direct。先看模块前缀是否命中 GOPRIVATE,再区分 GONOPROXY、GONOSUMDB、私有代理回退规则和非交互凭据问题。339 收藏 -
多个 Goroutine 并发执行时,errgroup 可以把首个错误、兄弟任务取消和统一等待放进同一条收敛链。本文给出可直接改造的 Go 写法,并说明 Context 必须传到真正执行 I/O 的位置。397 收藏 -
通过源码调用图与二进制符号表两个证据边界,讲清 govulncheck source、binary 模式的运行方式、结果差异、局限和修复决策。142 收藏 -
依赖升级后版本仍不如预期,通常不是 go get 失效,而是 MVS 按完整模块图计算了 build list。本文用三组 Go 命令定位谁抬高了版本,并处理 replace、exclude 与工作区边界。462 收藏 -
Go 调用方超时并不代表下游工作已经停止。本文用一条清晰的调用链说明如何把 Context 传到真正执行 I/O 的函数,在阻塞点响应取消,并用 cancel 和 Cause 正确收尾。323 收藏 -
WalkDir 返回的是跨平台的 fs 逻辑路径,不是通用的磁盘绝对路径。本文用根目录封装、filepath.FromSlash 和边界判断,说明如何把结果安全交给外部工具。292 收藏 -
govulncheck 的结果不只是在说依赖版本旧,还在说明漏洞符号是否能从项目入口被调用。本文按导入、符号和测试范围拆分扫描,帮助你判断哪些结果需要立即升级。189 收藏