Go教程技术文章
-
调用 context.WithCancel 后,goroutine 仍然不退出,通常不是 cancel 失效,而是工作循环没有监听 Done 或被阻塞在不可取消的操作上。本文用最小代码复现问题,再通过 pprof、日志和退出计数定位原因,给出可回归的修复方式。334 收藏 -
用 Go 标准库 http.ServeContent 做一个可断点续传的文件接口,串起 Range、206 Partial Content、Last-Modified 和 If-Modified-Since,并补上路径、时间和回归检查。469 收藏 -
Golang · Go教程 | 16小时前 | go · 性能 · net/http · HTTP缓存 · Go ETag If-None-Match 304缓存 http.ResponseWriter
Go 服务返回静态 JSON 或文章详情时,ETag 可以让浏览器先带 If-None-Match 询问资源是否变化,未变化就返回 304,减少响应体传输。本文用 net/http 写一个可运行的缓存协商示例,说明哈希生成、条件判断、响应头顺序和测试边界。395 收藏 -
Go 服务需要在不重启进程的情况下临时关闭一条新逻辑时,atomic.Bool 可以提供轻量的并发开关。本文用运行时功能开关示例说明 Load、Store、启动默认值、灰度比例和回滚检查该怎么组织,避免数据竞争与状态不一致。270 收藏 -
Golang · Go教程 | 17小时前 | JSON · 基准测试 · go · 性能优化 · 内存分配 encoding/json json.RawMessage json.Decoder Go JSON
Go 服务处理大批量 JSON 时,直接把请求体解码成完整结构体并不总是划算。本文用订单事件示例比较 json.Unmarshal、json.Decoder 和 json.RawMessage 的分配与吞吐边界,并给出可复现的基准测试写法。206 收藏 -
Go 项目从 fmt.Println 走向结构化日志后,标准库 slog、zap 和 zerolog 都能完成 JSON 输出,但默认行为、扩展方式、性能与迁移成本并不一样。本文按项目约束比较三种方案,并给出可落地的选择规则。151 收藏 -
Go 服务调用不稳定依赖时,重试循环里反复使用 time.After 容易留下不可控的定时器分配,固定退避也会让请求集中重试。本文用可取消的 timer.Reset 写一个带上限、抖动和结果核对的重试器。351 收藏 -
一个 Go REST API 如果让每个接口自由拼错误 JSON,客户端很快就会遇到无法判断、重复提示和误重试。本文用统一错误信封、稳定错误码和请求追踪字段,整理一套可兼容旧客户端的设计方式。427 收藏 -
Golang · Go教程 | 1天前 | golang · HTTP · 安全 · Go教程 · net/http · 接口防护 · net/http 请求超时 MaxBytesReader Go HTTP 请求体限制 内存防护
Go HTTP 服务接收上传、Webhook 或 JSON 请求时,单靠 ReadAll 很容易被异常大请求拖高内存。本文从请求体上限、读取超时、状态码和日志字段四个边界入手,给出一套可复查的 net/http 防护实现。173 收藏 -
给 Go HTTP 服务加一层轻量请求 ID 中间件:优先复用客户端 ID,没有可靠值时生成新 ID,再把它传入 context、响应头和 log/slog 日志,最后用 httptest 验收整条链路。405 收藏 -
Webhook 只校验 HMAC 还不够:攻击者可以把合法请求原样重发。本文用时间戳、Nonce、HMAC-SHA256 和一次性记录,完成一套可复查的 Go 签名校验流程。144 收藏 -
Golang · Go教程 | 2天前 | WEB开发 · go · 表单 · 用户体验 · html/template · 表单校验 html/template 无障碍 Go教程 字段错误 输入回填 aria-invalid
Go 的 html/template 表单校验失败时,重新渲染页面不等于只显示一行错误。本文用字段级错误、旧值回填、aria-invalid 和焦点定位,把一次失败提交收敛成可修复的交互。485 收藏 -
Go 服务的正则匹配突然占满 CPU,常见原因不是规则本身,而是每次请求都重新编译 regexp。本文用基线、pprof 和缓存编译结果的对比,说明如何定位并控制这类热路径开销。467 收藏 -
用 Go 设计一套可长期演进的 API 错误响应:统一错误码、稳定字段、请求追踪和兼容迁移一次讲清。352 收藏 -
订单同时有 paid、shipped、cancelled 三个布尔字段时,状态组合很快会失控。本文用 Go 实现一个显式订单状态机,梳理合法迁移、拒绝非法操作、落库与并发更新的边界。494 收藏