Go语言技术文章
-
Go 的 io/fs.ReadDir 会按文件名排序返回目录项,但底层 ReadDirFile、os.File.ReadDir 和错误场景的行为并不完全一样。本文从一次目录索引顺序错乱的排查开始,拆清排序、部分结果和测试边界。253 收藏 -
讲清 Go fs.WalkDir 遇到权限错误时的回调语义,用 errors.Is 判断权限并返回 fs.SkipDir,保留其他目录继续遍历。253 收藏 -
Go 的 T 与 *T 方法集并不相同。本文用接口赋值、可寻址变量和方法表达式拆开指针方法的调用与转换边界,帮你定位 method has pointer receiver 编译错误。253 收藏 -
Go 的 initorder 是编译器内部的初始化依赖分析,不是应用层排序 API。本文用显式包级依赖、单一初始化器和 init 边界说明如何稳定表达初始化顺序。253 收藏 -
围绕 Go archive/tar 的 Header.Name 讲清普通相对路径、父目录跳转、tar.ErrInsecurePath、链接条目和固定解压根目录的安全判断方法。253 收藏 -
讲清 Go http.ServeContent 中 modtime 的真实作用:如何配合 Range、If-Range 和 Last-Modified 返回稳定的部分内容响应,并避开 time.Now() 造成的缓存问题。253 收藏 -
介绍 Go 中如何让 zip.Reader 作为 fs.FS 使用,覆盖磁盘 ZIP、内存 ZIP、fs.ReadFile、fs.ReadDir、fs.Sub、路径约束与资源关闭。253 收藏 -
Go HTTP 客户端遇到 307/308 时必须重新读取请求体;若 Request.GetBody 为空且 Body 非空,客户端会停在重定向响应。本文说明自动设置 GetBody 的类型、自定义文件重开方式,以及重定向目标和幂等性控制。253 收藏 -
Go log/slog 不只是把日志改成 JSON:请求 ID、用户字段和模块信息应该在哪一层注入,决定了日志能否检索以及每条记录的成本。本文从 HTTP 请求链路拆开 With、分组属性、动态字段和高并发场景的取舍。252 收藏 -
用 base64.Encoding.Strict 对比普通解码,验证末尾填充位、CorruptInputError 和 DecodeString 的错误边界,给出可复现的 Go 示例。252 收藏 -
slices.Grow 的承诺是为接下来的 n 个元素预留至少够用的空间,不是把容量固定成某个数字。理解 len、cap、n 与 append 的关系,才能正确判断是否发生了额外分配。252 收藏 -
Go regexp 支持命名捕获组,适合解析带可选字段的日志和配置文本。本文用 SubexpNames、SubexpIndex 和 FindStringSubmatch 区分整体不匹配、可选字段缺失与业务默认值。252 收藏 -
Go 嵌入资源读取失败时,不要先手写 ReadFileFS。本文按接口分派、embed.FS 路径、fs.ValidPath、PathError 和自定义实现契约逐层排查。252 收藏 -
Go 1.24 新增 os.Root,用于把文件操作限制在指定目录内。本文从不可信压缩包和上传文件的落盘链路出发,说明 os.OpenRoot、Root.Create 的用法、适用边界和迁移检查点。251 收藏 -
Go 1.23 支持对特定函数类型使用 for range。文章给出 iter.Seq 的最小写法,解释 yield 返回 false 的停止契约、三种允许签名、go.mod 版本边界和面向旧工具链的采用建议。251 收藏