Go语言技术文章
-
Go 服务重新发布后,用户仍拿到旧 JS 或旧 CSS,通常不是浏览器“没刷新”,而是入口 HTML 与带指纹资源用了同一套缓存策略。本文用 Cache-Control、ETag 和文件名指纹拆出一套可验证的静态资源发布方式。251 收藏 -
Go 解析 JSON 时,struct、map[string]any 和 json.RawMessage 适合不同场景。字段结构稳定时优先用 struct,临时排查或不固定字段可以用 map,嵌套消息需要延迟处理时用 RawMessage,生产接口还要配合 UseNumber 和 DisallowUnknownFields 做边界控制。250 收藏 -
Golang · Go教程 | 2星期前 | HTTP · 文件下载 · Go教程 · Range请求 · ServeContent · 断点续传 Content-Range Go教程 HTTP Range ServeContent 206 Partial Content 视频拖动
用 Go 的 http.ServeContent 实现支持 Range 的文件响应,覆盖 206 片段返回、416 越界、Accept-Ranges、浏览器拖动和普通 200 兜底。250 收藏 -
Golang · Go问答 | 3星期前 | HTTP · Cookie · 浏览器 · cors · Go问答 · SameSite · cookie cors Secure SameSite Go问答 Set-Cookie 跨站请求 credentials
Go 接口已经返回 Set-Cookie,但浏览器下一次请求不带 Cookie,通常要同时检查 SameSite、Secure、Domain、Path、CORS 和前端 credentials。246 收藏 -
strings.Builder 的零值可直接使用,但写入后再按值复制会触发 panic。文章用传值参数、切片 append 和正确传指针的对比,说明 Builder 的安全边界与重构方法。246 收藏 -
Golang · Go问答 | 5天前 | 并发 · Go问答 · Go测试 · testing/synctest · 虚拟时间 · time.Sleep Go 1.25 testing/synctest Go并发测试 虚拟时间 flaky test
Go 并发测试里大量 time.Sleep 往往又慢又不稳定。Go 1.25 已将 testing/synctest 纳入标准库,可在受控测试环境中使用虚拟时间和 synctest.Wait 检查后台任务的稳定状态。本文用延迟写缓存的例子说明最小迁移方式、适用边界和回归检查。246 收藏 -
Go 测试容易因临时文件残留、环境变量串值而偶发失败。本文整理 t.TempDir、t.Setenv 和 t.Cleanup 的使用顺序、并行限制和检查清单,让测试资源能自动收口。245 收藏 -
回答 Go 并发读写 map 应该选 map+RWMutex、sync.Map 还是分片 map,按读写比例、热点键、维护成本和扩展性给出选择规则与代码示例。244 收藏 -
Golang · Go教程 | 2星期前 | HTTP · Go教程 · 问题排查 · io.ReadAll · JSON绑定 · Go教程 Go HTTP请求体 io.ReadAll Request Body JSON绑定
Go HTTP 请求体本质上是一个流,读取一次后游标就到末尾。中间件或日志里先用 io.ReadAll 读过 body,后面的 JSON 绑定就可能拿到空内容。排查时看读取顺序、Content-Length 和绑定错误,修复时缓存字节并用 io.NopCloser 重新赋回 r.Body。244 收藏 -
Golang · Go问答 | 1星期前 | 性能排查 · net/http · HTTP客户端 · Go问答 · 连接复用 · 连接复用 keep-alive http.Transport Response.Body Go HTTP Client
Go 服务的请求量并不高,客户端却不断新建 TCP 连接时,先看 Response.Body 是否在所有分支读到 EOF 并关闭。Go 官方文档说明,Body 未同时读完和关闭时,底层 Transport 可能无法复用持久连接。本文从一次连接数异常的现场出发,给出定位、修复和边界判断。241 收藏 -
Go 1.22 调整了 for 循环变量的作用域语义,常见的 goroutine 闭包引用循环变量问题会少很多。本文用代码对比讲清旧写法痛点、新规则、兼容注意和迁移建议。238 收藏 -
Golang · Go教程 | 3星期前 | HTTP · 文件上传 · Go教程 · 资源预算 · multipart · 文件上传 临时文件 ParseMultipartForm multipart Go教程 MaxBytesReader 资源预算
本文用 Go 标准库实现一个更稳的文件上传接口:先限制请求体大小,再控制内存预算和临时文件,最后补上错误提示、超时和清理检查。237 收藏 -
以 Go Webhook 接收接口为例,讲清 HMAC 验签为什么要绑定原始 body、时间戳和事件 ID,并给出防重放、事件去重、审计日志和验证清单。234 收藏 -
Go 1.23 支持对迭代器函数使用 range,并在标准库提供 iter.Seq 和 iter.Seq2。本文从调用方需求、参数语义、提前停止和兼容策略出发,说明何时返回切片,何时设计迭代器 API。234 收藏 -
Golang · Go问答 | 1天前 | 标准库 · bufio · 网络协议 · Go问答 · 流式读取 · peek Go bufio.Reader 协议解析 Go问答 Discard UnreadByte
Go 用 bufio.Reader 解析带长度或分隔符的协议时,Peek 只是查看缓冲内容,不会推进读取位置;Discard 才会消费字节。本文用一个简化帧协议拆开 Peek、Read、Discard、UnreadByte 的数据流转和边界处理。234 收藏