Go语言技术文章
-
Go sort.Find 可以同时返回有序切片中的命中下标和未命中时的插入位置。本文说明 cmp(i) 的方向、found 的判断、重复值边界与安全插入写法。272 收藏 -
Go text/template 默认会继续执行缺失的 map 字段。本文说明如何用 Option("missingkey=error") 让 Execute 立即返回错误,并比较 default、zero 与 error 的适用边界。468 收藏 -
Go html/template 用 define 注册布局、template 调用组件、block 提供默认区域。本文给出独立页面装配示例,说明克隆集合、数据传递、同名覆盖与空页面的排查方法。116 收藏 -
Go embed 会把目录连同前缀嵌入 embed.FS。本文用 fs.Sub 切出指定子目录,说明如何交给 fs.FS 消费者,以及遇到路径错误时怎样按根目录、斜杠和错误处理逐层排查。488 收藏 -
Go TLS 通过 tls.Config.NextProtos 声明 ALPN 应用层协议候选,再用 ConnectionState.NegotiatedProtocol 读取实际协商结果。本文说明客户端、服务端配置,以及匹配、空结果和不兼容边界。230 收藏 -
Go HMAC 验签应先统一签名编码,再比较原始 MAC 字节。本文说明 hmac.Equal 与 subtle.ConstantTimeCompare 的区别、长度处理和安全的请求校验流程。464 收藏 -
Go crypto/rand.Int 返回 [0,max) 内的均匀随机整数。本文说明 rand.Reader、big.Int、闭区间 span、非法范围检查和大整数转换的边界。468 收藏 -
Go log/slog 用 Group 组织单条日志字段,用 WithGroup 和 With 复用公共字段,再用 GroupAttrs 接入动态 Attr 切片。本文按 request、user 和 order 场景说明字段层级与基准指标的检查方法。189 收藏 -
自定义 slog.Handler 只在同步读取当前记录时可以直接使用 Record;一旦要把记录交给多个下游或异步保存,就应先调用 Record.Clone。本文说明共享状态边界、属性遍历方式和并发交接清单。381 收藏 -
Go 的 -bench 参数支持按基准名称层级筛选。本文用 Benchmark 子基准示例说明正则匹配、父基准探测、精确到末级和团队脚本化运行的边界。220 收藏 -
Go 模糊测试发现失败输入后,不要把 crash artifact 当作临时文件删除。本文以 FuzzParse 为例,说明如何定位 testdata/fuzz 语料、用 -run 精确复现,并让修复后的失败输入长期成为默认回归测试。339 收藏 -
Go Fuzz 的种子语料可以分成代码里的 f.Add 样本和 testdata/fuzz/FuzzTestName 目录语料。本文用一个可迁移的 FuzzDecode 示例说明两种来源怎样配合、目录文件怎样命名、参数类型怎样对齐,以及失败样本如何沉淀为回归用例。265 收藏 -
Go t.Run 子测试采用唯一语义标识,可让 CI 重跑命令保持稳定。本文比较命名方式,给出分组代码与分段正则,解释重复名、斜杠和父测试执行的边界。497 收藏 -
Go 测试需要临时文件时,t.TempDir 可以创建测试专属目录,并在测试及其子测试结束后自动清理。本文说明目录生命周期、多次调用、并行子测试和 GOTMPDIR 的使用边界。307 收藏 -
Go 表驱动测试调用 t.Parallel 后,闭包捕获的用例值和共享切片、map 可能互相污染。本文说明如何复制当前用例、隔离可变夹具,并用 go vet 与 -race 找到剩余风险。135 收藏