Go语言技术文章
-
Go 按平台拆分文件时,文件名后缀本身就是构建约束;本文说明 GOOS、GOARCH、//go:build 的叠加关系,并用 go list 查看实际入选文件,排查同名实现冲突和跨平台测试遗漏。263 收藏 -
iter.Seq2 的 K、V 是按值传给 yield 的,不能靠取 range 变量地址消除复制。本文对比指针返回、ID 句柄和保留值返回,给出生命周期、并发与提前停止的实用边界。441 收藏 -
Go build tags 复杂组合容易把 AND、OR、文件名后缀和 cgo 条件混在一起。本文用布尔表达式、go list 文件集合和跨环境测试矩阵,说明如何验证每条 build tags 路径。191 收藏 -
用 Go 1.23 的 iter.Seq 把 cursor 分页查询包装成惰性遍历,说明 yield 返回值、提前停止、重复游标和错误边界;需要保留页码时再用 iter.Seq2 传递附加信息。203 收藏 -
发布 Go 模块时,不能只检查 vendor 目录是否存在。通过重新生成 vendor、对照 vendor/modules.txt 和强制 -mod=vendor 构建,可以及时发现依赖版本漂移。312 收藏 -
maps.Keys 返回的键迭代顺序并不保证一致。本文用 slices.Sorted 和兼容写法,把 map 键转换为可复现的排序切片,并解释稳定结果与稳定排序算法的区别。158 收藏 -
Go 命令发现 vendor/modules.txt 与 go.mod 不一致时,不要手工改清单。先让 go.mod 和源码恢复准确,再用 go mod vendor 重建 vendor,最后用明确的 -mod 参数验收。159 收藏 -
用 Go maps.Copy 合并默认配置和覆盖配置,明确 dst/src 的覆盖方向,处理 nil 目标 map,并说明嵌套切片等值的浅复制边界。391 收藏 -
go mod vendor 后构建仍访问 module cache?从 GOMOD、GOWORK、GOFLAGS、vendor/modules.txt 和 -mod 模式逐层定位。357 收藏 -
Go maps.Clone 只做浅克隆:本文用顶层 map、嵌套 map、切片和指针说明哪些数据独立、哪些仍会共享,并给出按 value 类型选择复制策略的实战判断。501 收藏 -
GOPROXY=off 只禁止新的模块源通信,不会自动扫描兄弟目录。本文区分主模块、go.work/replace、本地模块缓存和 sumdb 校验链,按错误信息给出离线构建的排查与修复方法。106 收藏 -
Go slices.Clone 会复制切片的元素数组,但它是浅拷贝:值类型元素可独立修改,指针、map 或嵌套切片仍需按字段判断是否共享。本文用代码和边界表说明 Clone、copy 与深拷贝的选择。430 收藏 -
Go go.sum 报校验失败时,不要先删文件或关闭 sumdb。本文用 go.sum、GOPROXY、GOSUMDB 和模块缓存的证据,区分代理缓存异常与同版本源码变化。139 收藏 -
slices.Insert 批量插入是否复用底层数组,先看插入后的长度是否超过原切片容量,再结合尾部或中间插入位置判断移动成本。本文给出容量判断、别名边界与可复查验证代码。109 收藏 -
Go 拉取私有模块时,GOPROXY、GOPRIVATE、GONOPROXY 与 GONOSUMDB 的职责不同。本文按直连仓库和私有代理两种架构给出配置,并用回退规则定位 404、403 与 sumdb 校验错误。298 收藏