Go教程技术文章
-
maps.Clone 复制的是 map 的一层键值,不是递归深复制。本文用嵌套配置示例说明 slice、map、指针字段的共享边界,并给出按场景选择复制方案的方法。334 收藏 -
Go 泛型切片返回值要隔离外层修改,应分配独立数组并 copy。通过 PrefixCopy 示例区分共享视图、容量限制与浅拷贝,说明命名类型、nil、引用元素及迁移检查边界。143 收藏 -
Go 泛型约束可以同时写底层类型集合和接口方法。本文用一个可复用的约束示例说明类型集合、方法集、值接收者与指针接收者之间的边界。171 收藏 -
Go 泛型排序函数应使用 cmp.Ordered 表达可用的有序类型集合。本文从约束边界、命名类型、不可排序类型和浮点 NaN 语义入手,给出可复用写法与选型清单。499 收藏 -
通过 app 与 labelkit 原创示例说明 Go workspace 的 use、模块路径与工作区发现规则,并区分 replace、go work sync 和独立发布依赖,避免本地联调成功掩盖 go.mod 缺口。211 收藏 -
Go 基准测试把多个场景写在同一个 Benchmark 函数里时,结果很难比较。本文用 testing.B 的 Run 方法拆分样本,并把输入准备与计时范围分开,让每个子基准单独呈现 ns/op。179 收藏 -
Go 模糊测试不是输入越大越好。本文用 testing.F 的 seed、前置过滤和 go test 运行参数,把输入长度、无效样本、最小化时间与总运行时间放进一套可控预算。214 收藏 -
用 go test -race 从冲突访问栈和 goroutine 创建栈定位共享 map 竞态,再用同一把 sync.RWMutex 覆盖读取、写入和遍历路径。299 收藏 -
Go modules 的 vendor 模式能把构建所需依赖放进项目目录,但可复现的关键不是简单提交 vendor,而是让 go.mod、vendor/modules.txt 与构建模式保持一致。本文梳理 go mod vendor、-mod=vendor 和团队协作中的固定检查点。309 收藏 -
Go mod tidy 会扫描测试导入和构建标签,测试依赖被调整不一定是误删。本文用导入点、条件测试、-diff 预览和 CI 回归四个检查点,整理出可复查的模块依赖边界。365 收藏 -
Go 测试遇到环境、资源或输入条件不满足时,可以用 testing.T.Skip 或 Skipf 标记为跳过并保留原因。本文说明如何划分 Skip、Fail 与 Fatal 的边界,并给出条件测试、子测试和模糊测试的写法。217 收藏 -
表驱动测试加上 t.Parallel 后,真正需要解决的是每个子测试的数据边界。本文从 t.Run、循环变量、局部副本和 Cleanup 的生命周期说明如何避免并行子测试互相污染。214 收藏 -
Go database/sql Tx 在 BeginTx 成功后注册 defer 回滚兜底,用提交成功标记明确收尾权,并保留业务、提交与清理错误。附原创封装示例与取消、panic 和提交失败的边界说明。330 收藏 -
Go 的 database/sql 使用 QueryRow 查询单行时,真正的错误要到 Scan 才返回。本文说明如何用 errors.Is 判断 sql.ErrNoRows,并区分空结果、字段 NULL、查询失败和多行结果等边界。386 收藏 -
外部毫秒参数不要直接乘 time.Millisecond。本文用 Go 标准库写一个带格式、符号和上限检查的转换函数,处理精度、溢出与边界值。453 收藏