Go语言技术文章
-
os.Rename 不是跨文件系统复制器:源文件和目标文件位于不同挂载或卷时,底层 rename 不能一次完成目录项变更。本文说明如何识别这类错误,并用目标目录内的临时文件实现可控的复制后删除。187 收藏 -
Go 的 os.MkdirAll 创建目录失败时,问题通常不在 0750 或 0777 本身,而在父目录搜索/写入权限、运行身份、只读挂载或 umask。本文按 PathError 定位受限环节,并给出更稳妥的修复顺序。319 收藏 -
Go 使用 bufio.Writer 写文件后内容为空,通常不是 os.Create 没有成功,而是数据仍停留在 Writer 的内存缓冲区。本文从实际排障场景出发,说明 Flush、Close、Sync 的职责,给出带错误处理的稳定写法和检查清单。162 收藏 -
Go 的 csv.Reader 遇到不等长字段时返回 ErrFieldCount,根因通常是 FieldsPerRecord 的固定字段数约束。本文解释 0、正数、负数三种配置的差异,并给出严格校验、容忍变长记录和按业务规则整形的实用写法。156 收藏 -
Go multipart 解析报 boundary 缺失,通常是 Content-Type 只有 multipart/form-data 却没有 boundary 参数。本文从客户端组包、请求头和服务端解析三个位置排查,并给出 FormFile、ParseMultipartForm 与流式 MultipartReader 的正确用法。376 收藏 -
Go TLS 握手出现证书主机名不匹配时,重点核对实际校验主机名、SNI 和证书 SAN;本文给出诊断命令、Go 配置示例以及域名和 IP 场景的修复边界。402 收藏 -
从 Shutdown 的等待语义、活跃请求、慢操作和长连接边界出发,定位 Go HTTP 服务退出迟迟不返回的原因,并给出带超时的退出编排方式。269 收藏 -
用短作用域请求函数说明Go HTTP响应体的关闭责任,覆盖状态异常与读取失败,区分EOF、Close和连接复用,并处理循环defer及流式接口的所有权。212 收藏 -
Go 的 IPv4-mapped IPv6 地址看起来像 IPv6,但它包裹的是 IPv4。本文用 netip.Addr 说明白名单直接比较为什么失效,并给出用 Unmap 统一规范化、保留真正 IPv6 语义的实现方式。253 收藏 -
Go DNS 解析在本机正常、容器里失败,通常不是 Go 随机改变了结果,而是两侧的 resolv.conf、hosts、网络命名空间或解析器路径不同。本文给出一套从输入配置到 net.Resolver 的排查与修复路线。405 收藏 -
从 GOTOOLCHAIN、go.mod/go.work 的 go 与 toolchain 行出发,解释 Go 工具链为何自动切换,以及 auto、path、local 和固定版本在开发、CI、离线环境中的差异。311 收藏 -
按依赖变更说明Go vendor不自动刷新的原因,区分模块声明、包引用与模块缓存,给出单模块更新和工作区范围处理方法,并对齐CI构建模式与快照提交。454 收藏 -
Go embed 报 pattern 没有匹配文件,通常不是资源不存在,而是 pattern 相对目录、文件名大小写、扩展名或目录可见性与实际结构不一致。本文用最小示例拆解定位方法。330 收藏 -
multipart.FileHeader.Size 是文件部件的大小元数据,读取长度还会受到当前游标、读取上限和错误处理影响。本文用 Go 示例拆开这几个数字的含义,并给出上传场景的排查与限制方式。320 收藏 -
修改环境变量后 Go 构建结果没有变化,不一定是缓存失效。本文区分运行时变量、构建参数和 cgo 外部依赖,给出缓存命中排查与安全重建方法。278 收藏