Go语言技术文章
-
Go flag.BoolFunc 适合无显式值但需要每次触发动作的命令行开关。本文说明重复解析、显式值、错误处理,以及它和 Bool、Func、自定义 Value 的选择边界。246 收藏 -
Go 迁移到 ML-KEM 时,不要把后量子算法简单替换或直接拼接共享秘密。本文以 crypto/mlkem 和传统 ECDH 为例,说明协商、上下文绑定、HKDF 派生与失败即拒绝的组合方式。245 收藏 -
testing/quick 默认通过反射生成输入,遇到含不可导出字段的结构体就无法自动构造。本文用自定义 Generator 和 Config.Values 两条路径处理本地类型与 time.Time 等外部类型,并说明随机边界与可复现配置。238 收藏 -
slices.SortedFunc 会收集迭代器并按自定义比较函数排序,但不保证同键元素的原始顺序。本文通过订单案例解释 SortedStableFunc、显式次级键、map 输入顺序与严格弱序比较器的选择。236 收藏 -
Go testing/quick.Value 默认生成结构体时遇到未导出字段会受反射写入边界影响,本文说明 Generator、Config.Values 与构造函数的选择方法。236 收藏 -
讲清 Go slices.Chunk 的固定大小切分、底层数组别名、cap 裁剪、append 行为,以及何时应该用 slices.Clone 保存独立批次。234 收藏 -
Go fuzzing 不可重复,通常不是随机输入本身的问题,而是 fuzz target 读了真实时间、共享状态或不可控外部依赖。本文用依赖接口、Fake 实现、固定种子和失败语料目录,整理出可重复运行的 Go 模糊测试结构。232 收藏 -
Go 反射通过 FieldByName 读取同名嵌入字段时,多个路径无法唯一消歧会返回无效 Value。本文演示如何检查 IsValid、改用 FieldByIndex,并处理 nil 嵌入指针。232 收藏 -
Go handler 的取消分支不必依赖真实网络超时。本文用 httptest.NewRequestWithContext 构造已取消和带截止时间的请求,区分 context.Canceled 与 context.DeadlineExceeded,并说明 ResponseRecorder、取消时机和断言边界。230 收藏 -
go generate 默认在包含指令的 Go 包源目录运行。本文从工作目录、相对路径、环境变量和模块根目录入手,排查命令找不到、输入为空与生成文件落错位置等问题。229 收藏 -
Go 1.26 的 testing.T.ArtifactDir 为测试或子测试提供稳定的产物目录;未开启 -artifacts 时目录用于临时排查并会清理,开启后才会落到输出目录中保留。本文给出最小写法、子测试边界和 CI 保存策略。226 收藏 -
Go 的 flag.FlagSet.Visit 只遍历已经设置的命令行参数,适合生成启动日志和配置审计清单。本文用一个自定义 FlagSet 说明它与 VisitAll 的区别、排序规则和使用边界。225 收藏 -
io/fs 使用斜杠分隔的虚拟路径,而本地文件 API 服从操作系统规则。本文拆开 fs.ValidPath、filepath.Localize 和 filepath.FromSlash 的职责,给出可复用的跨平台转换写法。224 收藏 -
go build -trimpath 会移除可执行文件中的本机文件系统路径,但不会自动删除调试符号。本文用最小示例拆解它对堆栈、源码导航、CI 可复现构建和生产发布的影响,并给出按场景选择构建参数的方法。224 收藏 -
Go sort.Search 并不要求把数据重新排成升序。本文从第一个 true 的返回语义出发,说明降序切片为什么使用 data[i] <= target,并处理精确命中、重复值、未找到和 len(data) 边界。222 收藏