Go语言技术文章
-
用 Go archive/zip 按条目读取大文件,先检查目录元数据,再用 File.Open 和 io.CopyBuffer 流式处理,同时区分文件名编码、路径安全、压缩算法和校验错误。385 收藏 -
Go 中同名包不代表同一个导入目标。本文用 go list 对照 ImportPath、Dir 和 Name,说明如何核对 go.mod 模块路径、internal 父目录与调用方边界,并定位真实加载错误。385 收藏 -
用 io/fs.FS 统一 Go 的 embed.FS 与 os.DirFS,解释 fs.ValidPath 的路径规则、发布目录边界和开发环境切换方式。403 收藏 -
Go replace 只改变模块源码的解析位置,不会绕过 internal 的导入边界。本文用 go.mod、import path 和 go list 说明本地替换、模块改名及公共包迁移的处理方法。127 收藏 -
Go 的 //go:embed 资源属于 embed.FS,os.Stat 查询的是当前工作目录。本文用 fs.ValidPath、fs.Stat 和路径层级排查嵌入静态资源找不到的原因。480 收藏 -
Go 导入 internal 包被拒绝时,应先定位 internal 目录上方的允许路径,再用 go.mod 和 go list 对照 ImportPath、Module.Path 及嵌套 module,最后选择移动调用方或提取公开 API。152 收藏 -
Go 使用 embed.FS 读取子目录时,路径不是磁盘绝对路径,而是相对嵌入文件系统根的斜杠路径。本文说明 fs.ValidPath、path.Join 和 fs.Sub 如何配合,避免路径拼错和发布后找不到文件。153 收藏 -
Go 交叉编译后的二进制运行时报架构错误时,先核对 GOOS、GOARCH 与产物格式,再区分纯 Go、cgo、动态加载器和目标机器不匹配,避免只改一个编译参数。137 收藏 -
解释 Go CGO_ENABLED=0 后依赖包无法编译的原因,教你用 GOOS、GOARCH、CgoFiles 和 GoFiles 判断文件选择,并在启用 cgo、纯 Go实现与自有包双实现之间做出可验证的修复。418 收藏 -
Go 反射读取结构体 json 标签时,Get 无法区分未声明与显式空值。本文用 StructTag.Lookup 解释 value 和 ok 的三态判断,并说明格式异常应如何配合 go vet 排查。360 收藏 -
Go 交叉编译开启 cgo 后找不到目标编译器,通常是只设置了 CGO_ENABLED 而没有准备匹配 GOOS/GOARCH 的 CC、目标头文件、运行库和链接器。本文按变量、工具链和报错层次给出排查方法。444 收藏 -
Go 读取结构体自定义标签时,先通过 reflect.TypeOf 和 Field 拿到 StructField,再用 Tag.Lookup 区分标签缺失与显式空值;Tag.Get 适合只关心字符串的兼容场景,但非约定格式的返回值不应被依赖。291 收藏 -
Go 的 build tag 不是只作用于测试文件。本文拆开构建约束、_test.go 后缀和 go test 文件选择规则,给出用 go list 与 go test 定位测试覆盖问题的方法。375 收藏 -
Go 1.23 的 range-over-function 会把循环里的 break 转成迭代器可识别的停止信号。本文用 iter.Seq、Seq2 和 iter.Pull 说明 yield 返回 false、defer 清理与 stop() 的配合,解决惰性遍历提前结束时资源没有释放的问题。380 收藏 -
Go 按平台拆分文件时,文件名后缀本身就是构建约束;本文说明 GOOS、GOARCH、//go:build 的叠加关系,并用 go list 查看实际入选文件,排查同名实现冲突和跨平台测试遗漏。263 收藏