Go语言技术文章
-
上传中断后残留临时文件,通常是清理责任混淆或 defer 注册过晚。本文区分 ParseMultipartForm 与 MultipartReader 的文件所有权,并给出断流清理、所有权转移和崩溃回收写法。168 收藏 -
Golang · Go教程 | 3星期前 | 文件上传 · Go教程 · net/http · 接口安全 · MaxBytesReader io.LimitReader 流式上传 Go MultipartReader multipart字段限制
用 MultipartReader 流式遍历表单字段,通过整包上限、字段白名单和 limit+1 哨兵读取分别限制文本与文件,并补齐资源清理、413 响应和审计测试。305 收藏 -
Go 的 multipart: message too large 不只是文件太大。本文区分请求体总量、非文件字段内存预算和文件临时落盘,给出 ParseMultipartForm 与 MultipartReader 的处理方案。293 收藏 -
使用 multipart.Reader、io.Pipe 和 multipart.Writer,Go 可以把上传文件按段转发到上游,不调用 ReadForm、不创建临时文件,并正确处理边界、背压、取消和错误传播。373 收藏 -
Go 1.27 允许结构体复合字面量直接使用提升字段名。本文用可迁移的 Go 示例说明新旧写法、字段选择规则,以及指针嵌入和字段重叠等编译边界。186 收藏 -
OpenTelemetry Go 的 Span 到达顺序不等于调用顺序。本文从 HTTP 埋点、Context 传播和暂存配对三个层面说明,怎样让乱序遥测仍能还原服务调用关系。148 收藏 -
下游接口少量请求只是变慢而没有失败时,可以用 Go 的 net/http 与 context 为幂等读取请求增加受控副本:设置对冲延迟、共享总截止时间,首个成功后取消其余副本,同时限制额外流量。103 收藏 -
容器里的 Go 程序需要断点调试时,关键是把调试器参数和应用参数分开,并用关闭优化的二进制启动 headless Delve。本文给出一套可迁移的构建、启动、连接和排障步骤。435 收藏 -
slog.LevelVar 在单进程内并发安全且会被 Handler 每条记录读取。动态修改只影响部分请求,通常是 Logger/Handler 未共享同一 LevelVar、存在双重过滤,或多实例只更新了一个进程。223 收藏 -
Go slog 批量 Handler 的关键不是简单加 channel,而是同时保留 WithAttrs/WithGroup 语义、建立事件快照、处理背压与异步错误。本文给出可扩展的批量提交骨架和关闭策略。240 收藏 -
自定义 slog.Handler 重复输出属性,通常源于 WithAttrs 修改共享切片、WithGroup 重复展开或 Handle 合并了两次。本文按属性来源、不可变派生和分组作用域给出排查与修复方法。341 收藏 -
slog.HandlerOptions 的 AddSource 能把调用文件和行号加入日志,配合 LevelError 可构造只输出错误的 Handler。本文给出路径精简、包装函数修正、结构测试和性能取舍的完整流程。465 收藏 -
slog.WithGroup 只影响分组建立后追加的字段;JSONHandler 输出嵌套对象,TextHandler 则使用点号限定键名。本文用最小复现定位调用顺序、Group 混用和自定义 Handler 问题,并给出统一构造与测试方法。416 收藏 -
用 Go 标准库 log/slog 为一次请求建立 request、http、upstream 嵌套属性组,掌握 WithGroup、With、slog.Group 与 LogAttrs 的使用边界,并处理 context、脱敏和性能问题。311 收藏 -
slices.SortFunc 不会替你校验比较函数。违反严格弱序后,切片可能部分错序、结果随输入变化;本文给出 cmp.Compare、多字段排序、稳定性选择和性质测试方案。206 收藏