Go教程技术文章
-
go/ast.Preorder 从 Go 1.23 开始返回 iter.Seq[ast.Node],适合用 range 按深度优先顺序读取语法树。本文用一个真实的 AST 分析小工具说明如何解析源码、按节点类型筛选、在找到目标后自然停止,并比较 Inspect 的控制方式。239 收藏 -
embed.FS 读取静态资源时,文件路径必须遵守 io/fs 的相对路径规则。本文用 assets/ 与模板读取场景说明路径前缀、fs.ValidPath 和 fs.Sub 的边界,给出可复用的校验与测试写法。239 收藏 -
Go 数据竞争往往不是每次都能复现。本文用 go test -race 接入高覆盖测试,并从读写访问栈和 goroutine 创建栈定位共享状态边界,最后给出修复后的复测清单。239 收藏 -
Go 1.22 调整了 for 循环变量的作用域语义,常见的 goroutine 闭包引用循环变量问题会少很多。本文用代码对比讲清旧写法痛点、新规则、兼容注意和迁移建议。238 收藏 -
Golang · Go教程 | 1星期前 | 并发 · HTTP · go · Context · net/http · 请求改写 · HTTP中间件 Go教程 context取消 http.Request.Clone WithContext 请求复制
Go 的 http.Request.Clone 和 WithContext 都能得到一份新请求,但复制深度、Header 与 URL 的独立性不同。本文用重试转发和取消场景拆开两者边界,并用测试确认改写不会污染原请求。238 收藏 -
用 Go 1.25+ testing/synctest 测试定时器、异步回调和取消路径,解释 Test、Wait、fake time 的最小用法,以及网络和外部 goroutine 为什么不能直接放进 bubble。238 收藏 -
Go 泛型中的数值约束不只是把 int 和 float64 列出来,还要处理底层类型、~ 运算符、接口组合和类型推断。本文用一个可运行的统计函数拆解约束边界。238 收藏 -
Go 服务在数据库事务提交后发送消息、刷新缓存或调用外部接口时,最难处理的是提交成功与副作用失败之间的时间窗。本文用 Outbox 表、事务内写入、独立投递与幂等消费拆开重试边界,并给出可验证的 Go 实现与验收清单。238 收藏 -
Golang · Go教程 | 2个月前 | HTTP · 文件上传 · Go教程 · 资源预算 · multipart · 文件上传 临时文件 ParseMultipartForm multipart Go教程 MaxBytesReader 资源预算
本文用 Go 标准库实现一个更稳的文件上传接口:先限制请求体大小,再控制内存预算和临时文件,最后补上错误提示、超时和清理检查。237 收藏 -
slices.Collect 能把 iter.Seq 变成切片,但空序列的结果、容量预估和重复遍历边界容易被忽略。本文用最小代码拆开收集过程,并给出选择容量策略的判断方法。236 收藏 -
Go 泛型约束不只是列出可参与运算的类型,还能通过接口嵌入和方法集限制调用者。本文用一个可编译示例拆开类型集、方法集与指针接收者的边界。235 收藏 -
以 Go Webhook 接收接口为例,讲清 HMAC 验签为什么要绑定原始 body、时间戳和事件 ID,并给出防重放、事件去重、审计日志和验证清单。234 收藏 -
Go 1.23 支持对迭代器函数使用 range,并在标准库提供 iter.Seq 和 iter.Seq2。本文从调用方需求、参数语义、提前停止和兼容策略出发,说明何时返回切片,何时设计迭代器 API。234 收藏 -
Golang · Go教程 | 1星期前 | 标准库 · golang · go · 性能 · 内存管理 · 代码排错 · 内存分配 性能优化 CAP bytes.Buffer Go教程 len Grow
bytes.Buffer 的 Grow 不是越大越好:它只保证后续写入有足够空间,Len 与 Cap 观察到的是不同维度。本文用请求拼装和最小测试说明如何估算容量、何时提前 Grow,以及如何验证扩容是否真的减少了分配。234 收藏 -
io.ReadAll 写起来很短,但它会把输入完整收集到一个字节切片中。本文从大响应和未知长度输入的现场出发,解释 len/cap 增长、峰值内存与分块读取的边界,给出可复查的 Go 代码。231 收藏