Go语言技术文章
-
用 Go 和原生前端表单搭一套可恢复的重复提交处理:客户端按钮状态负责体验,服务端幂等键负责最终一致,超时后通过查询接口确认结果。346 收藏 -
把请求参数放进 Go map 再写入缓存时,真正容易出错的是边界校验、键的稳定性和过期清理。本文用一个商品筛选缓存场景,串起输入校验、键生成、并发读写与回收验证。343 收藏 -
用 Go crypto/subtle.ConstantTimeCompare 做密钥或摘要校验时,长度不一致会直接返回 false。本文从源码语义、输入预处理和可复现测试三个角度说明如何避免误判与边界漏洞。412 收藏 -
Go 1.19 引入的 fmt.Appendf 可以把格式化结果直接追加到已有字节切片,适合协议拼接、日志缓冲和小型序列化场景。本文说明返回值、容量扩展、兼容写法和基准测试边界。156 收藏 -
用 Go embed.FS 读取内嵌模板时,路径必须是相对且规范化的 slash 路径。本文从路径校验、fs.ReadFile 错误分层和测试验收三个角度,给出可直接落地的安全读取函数。149 收藏 -
用 testing.TB.Cleanup 管理临时目录、环境变量、HTTP 服务和数据库夹具,说明注册时机、后进先出顺序、子测试边界与失败排查方法。375 收藏 -
Go 的 unique.Handle 适合把重复的可比较值映射为轻量句柄,用句柄比较代替长字符串比较,同时保留 Value 取回原值的能力。本文从标签去重场景出发,拆开 Make、Value、句柄相等和垃圾回收边界,并给出可运行的验证代码。277 收藏 -
用一个并发加载配置的例子拆开 Go 一次性多值初始化:为什么结果和错误会一起缓存,如何验证只初始化一次,以及何时应该换成可重试的方案。185 收藏 -
bytes.Buffer 和 strings.Builder 都能减少反复拼接带来的分配,但它们服务的结果类型不同。本文用日志行拼接、HTTP响应和复用场景对比 Write、WriteString、String、Bytes 与 Reset 的边界,给出可落地的选择规则。150 收藏 -
strings.Cut 把字符串拆分成 before、after 和 found 三个结果,适合处理带前缀的配置、路由和协议字段。本文用可运行示例说明空字符串边界、与 HasPrefix 的分工,以及从 Index 写法迁移时的验收方式。305 收藏 -
Go 泛型函数里,类型参数能否调用方法取决于约束是否明确声明该方法,而不是具体类型本身是否拥有它。本文用最小代码拆开类型集合、方法集和接口约束的边界。313 收藏 -
用 Go 泛型拆解 type set、~底层类型与方法集的关系,说明为什么约束能参与类型运算却不一定能直接调用方法,并给出可编译的设计与验收方式。329 收藏 -
用 Go 标准库实现一个可取消的定时重试任务,覆盖 context 取消、指数退避、最大尝试次数、错误分类和优雅退出,给出可直接运行的最小示例与验收方法。349 收藏 -
Go 1.20 引入 unsafe.StringData、unsafe.String 和 unsafe.SliceData 后,字符串与字节切片之间可以少一次复制,但指针生命周期、只读约束和空字符串边界必须一起核验。本文用可复现实验拆开这些风险。197 收藏 -
用 Go 原生 fuzz 测试把线上边界输入沉淀为种子语料,说明失败样本如何复现、加入回归集,并在 CI 中验收执行结果。358 收藏