Go语言技术文章
-
Go 服务读取 HTTP 响应时,io.ReadAll 会把内容一次性放进内存。本文用 io.LimitReader 和 http.MaxBytesReader 拆开客户端、服务端的上限策略,并说明如何区分截断与真实读取错误。220 收藏 -
用 Go http.ServeContent 提供音视频或大文件时,Range 请求返回 416 往往不是客户端故障,而是 Seek、文件大小和请求区间没有对上。本文用可复现的检查路径拆开 206 与 416 的边界。219 收藏 -
给 Go HTTP 接口限制请求体时,http.MaxBytesReader 超限并不会自动替处理器写完响应。本文用一个可运行的上传接口说明读取错误、状态码时机、连接收尾和测试验收应该怎样配合。218 收藏 -
Go 1.25 中可以用 runtime/debug.SetCrashOutput 把未处理 panic 和致命错误追加写入单独文件。本文用一个可运行的崩溃留证流程,说明文件轮转、监控进程接收和恢复边界。216 收藏 -
Go 1.21 引入的 clear 可以把切片元素重置为类型零值,尤其适合切断指针切片和含引用字段的对象链。本文从数组范围、别名切片和旧工具链兼容三个边界说明它怎么用、哪里容易清错。213 收藏 -
用 Go 的 io.CopyN 处理固定长度读取时,区分完整复制、短读 EOF 与底层读取错误,并给出可验证的判断代码。213 收藏 -
Go 1.21 引入的 clear 可以快速清空 map,但它解决的是元素清理,不是所有内存都立刻归还。本文用临时缓存场景拆解 clear、重新 make 和逐项删除的差别,再用基准与运行时指标确认容量复用是否真的适合当前代码。211 收藏 -
处理 multipart/form-data 时,不必把上传文件全部读入内存。本文用 NextPart 与 NextRawPart 展示如何按字段读取、跳过文件内容,并说明文件名解码和边界错误的判断方法。210 收藏 -
解释 Go regexp.MustCompile 与 regexp.Compile 在配置加载中的边界:哪些规则适合启动即失败,哪些输入必须保留运行时错误,并给出可验证的代码写法。210 收藏 -
用一个可运行的 Go HTTP 示例,把租户配置从全局变量迁移到请求级依赖容器,说明 Handler、TenantConfig 和 context.Context 的边界、取舍与验证方式。209 收藏 -
Golang · Go教程 | 1天前 | 标准库 · 定时器 · 并发控制 · Go教程 · 工程实践 · Go 并发 定时任务 time.Ticker Ticker.Reset Ticker.Stop
服务里的定时任务需要动态调整周期时,直接替换 ticker 容易留下旧循环或多条消费路径。本文用一个可停止的刷新任务演示 time.NewTicker、Ticker.Reset、Ticker.Stop 与 ticker.C 的最小配合,说明 Reset 的边界、退出方式和复查方法。207 收藏 -
slices.Grow 不是无条件提速开关。本文用批量追加日志事件的场景,拆开容量预估、底层数组复用、负数参数和基准验证,给出可以落地的使用边界。206 收藏 -
regexp.ReplaceAllString 会把替换字符串里的 $1 当成子匹配引用;需要保留字面量时,应根据输入来源选择 ReplaceAllLiteralString 或 ReplaceAllStringFunc。205 收藏 -
Go 的 http.Client.Timeout 覆盖整个请求生命周期,而 Transport.ResponseHeaderTimeout 只等待响应头。把两者放在一起理解,才能避免响应体读取被误判成连接超时。205 收藏 -
用一个可运行的 Go 示例说明 time.Ticker.Reset 的重置语义、旧节拍判断、Stop 生命周期与并发读取边界,避免调度周期切换时误处理旧事件。204 收藏