Go语言技术文章
-
Go 服务端中间件读取 http.Request Body 后,下游为什么只能拿到空内容?关键在于 Body 是一次性读取流,读取后要用缓存字节重建 Request.Body,并同时控制请求体大小与错误分支。484 收藏 -
Go 的 gzip.Reader 默认会把拼接成员连续解压。若要逐个读取,先关闭 Multistream;每个成员读到 io.EOF 后调用 Reset,再次关闭 Multistream,并确保底层 Reader 实现 io.ByteReader。382 收藏 -
Go 的 embed 在编译期读取资源;交叉编译不会自动改写同一文件,平台差异应通过构建约束选择不同源文件。168 收藏 -
Go archive/zip 的 Writer.Close 负责写入 ZIP 中央目录,忽略其错误可能把半成品当成成功文件。本文用分层错误处理和临时文件发布说明可靠写法。481 收藏 -
交叉编译后不要只看构建机上的 GOOS 和 GOARCH。本文用 go env、文件格式、go version -m 和 build ID 四层证据,确认最终二进制实际面向的操作系统与 CPU 架构。396 收藏 -
Go 的 archive/zip 中,File.Open 返回的是带解压与校验边界的 io.ReadCloser。读取成员后应关闭它;如果外层使用 OpenReader 打开压缩包,还要另行关闭外层 ReadCloser。390 收藏 -
设置 GOOS 和 GOARCH 只改变 Go 的目标平台,不会自动提供目标平台的 C 编译器、头文件和库。本文按 cgo 开关、CC 工具链、编译与链接错误四层排查交叉构建失败。351 收藏 -
Go archive/zip 读取中文文件名时,应先查看 ZIP 的 UTF-8 标志位与 File.NonUTF8,再决定是否做 GBK 或 GB18030 转码。本文给出默认读取、来源确认、显式解码和路径安全检查的完整边界。363 收藏 -
用 *_test.go 保存普通测试,用 integration 或 e2e 标签隔离数据库、消息队列和外部服务测试;本文说明标签写法、默认命令、集成命令与 go list 排查方法。262 收藏 -
filepath.WalkDir 不会跟随符号链接进入目标目录,因为它按链接目录项本身判断 IsDir。本文用一个小型扫描器解释 DirEntry、Type、Info 与 EvalSymlinks 的边界。361 收藏 -
迁移 Go 构建约束时,//go:build 与 // +build 必须表达同一条件;理解空格、逗号和多行的逻辑,再用 gofmt、go vet 和跨平台构建检查结果。496 收藏 -
filepath.WalkDir 中 fs.SkipDir 是跳过目录的控制信号,普通非 nil error 才会终止整棵目录树;文件节点返回 SkipDir 还会影响其父目录。172 收藏 -
Go build tags 同时写平台和自定义条件时,文件未被选中通常不是 go build 失效,而是 &&、||、-tags 传值或文件名隐式约束叠加后的结果。本文用 go list 逐层排查。386 收藏 -
使用 filepath.WalkDir 遍历目录时,权限错误不一定要让整棵目录树停止。本文说明如何区分目录与文件错误,正确使用 filepath.SkipDir,并保留非预期错误。167 收藏 -
只读构建环境中,-mod=vendor 才是强制使用 vendor 的开关;-mod=readonly 只是不允许修改 go.mod。本文区分三种模式、GOPROXY=off 与 vendor/modules.txt 一致性,并给出适合 CI 的固定配置。177 收藏