Go语言技术文章
-
Go 服务重新发布后,用户仍拿到旧 JS 或旧 CSS,通常不是浏览器“没刷新”,而是入口 HTML 与带指纹资源用了同一套缓存策略。本文用 Cache-Control、ETag 和文件名指纹拆出一套可验证的静态资源发布方式。251 收藏 -
Golang · Go教程 | 4天前 | HTTP · 路由 · Go教程 · Go1.22 · ServeMux · HTTP路由 ServeMux Go教程 Go1.22 PathValue 路由迁移
Go 1.22 的 net/http ServeMux 支持方法匹配和路径通配符。本文从旧的前缀路由迁移到 GET /posts/{id},讲清 PathValue 取参、405 行为、静态路由优先级与冲突模式的测试方法。377 收藏 -
Golang · Go问答 | 4天前 | 依赖注入 · 设计模式 · api设计 · Go问答 · Functional Options · API设计 默认值 依赖注入 Go问答 Functional Options 函数选项
Go 的 Functional Options 能让构造函数同时保留合理默认值和可读的可选配置,但它不适合掩盖必填依赖。本文用一个 HTTP Client 组件说明 Option 的最小写法、默认值与必填项的边界、常见反例和测试清单。153 收藏 -
Golang · Go问答 | 4天前 | 单元测试 · HTTP · Go问答 · httptest · ResponseRecorder · 单元测试 HTTP响应 httptest Go问答 ResponseRecorder Handler测试
Go 用 httptest 写 Handler 单测时,常见现象是状态码为 0、响应头没生效,或读到的响应体为空。关键是区分 ResponseRecorder 的记录时机、WriteHeader 的提交边界,以及 Result 必须在 Handler 返回后再读取。文中给出可复用的最小测试和复查清单。481 收藏 -
Golang · Go问答 | 4天前 | 并发 · 性能优化 · sync.Pool · bytes.Buffer · Go问答 · reset bytes.Buffer 对象复用 Go sync.Pool 数据串行
sync.Pool 复用 bytes.Buffer 时,旧内容残留和过早归还都会让响应出现串数据。本文从现象、最小复现到 Reset 与归还时机,给出可直接用于编码响应的安全写法。294 收藏 -
一个全局 QPS 阈值只能挡住总流量,挡不住单个租户或重接口挤占资源。本文用 Go 的令牌桶限流器拆解全局、租户、接口三层配额的取舍、最小实现和观察指标。100 收藏 -
Golang · Go教程 | 4天前 | https · cors · chrome · Go教程 · Local Network Access · 内网接口 · 浏览器权限 Go CORS Go 内网接口 Chrome 142 Local Network Access targetAddressSpace
Chrome 142 开始把从公网页面到本地 IP 或回环地址的请求放到 Local Network Access 权限提示之后。Go 服务端只补 CORS 头并不能替用户授予权限。本文用一个内网设备状态接口说明如何区分浏览器权限、HTTPS、Go CORS 和 iframe Permissions-Policy,避免继续套用已搁置的 PNA 预检方案。152 收藏 -
Golang · Go问答 | 4天前 | golang · errgroup · Context · 并发控制 · Go问答 · SetLimit · 错误传播 Go errgroup.SetLimit errgroup.WithContext Go 并发限制 批量调用 context 取消
批量请求第三方接口时,errgroup.WithContext 配合 SetLimit 能把并发上限、首个错误返回和派生上下文取消放进同一段代码。这里给出可直接核对的最小写法、限额取值与几个容易卡住的边界。467 收藏 -
Golang · Go问答 | 4天前 | WaitGroup · golang · goroutine · 并发编程 · Go问答 · Go 1.25 · Goroutine 并发 WaitGroup Go 1.25 sync.WaitGroup.Go Add Done
Go 1.25 为 sync.WaitGroup 增加了 Go 方法,常见的 Add、go func、defer Done 三段式可以收成一次调用。它能减少计数配对遗漏,却不会替业务处理 panic、取消或结果收集。本文用批量写入场景解释最小写法、和旧写法的边界差异、版本兼容与复用 WaitGroup 时容易忽略的顺序。448 收藏 -
Golang · Go教程 | 5天前 | golang · 缓存 · singleflight · go · 高并发 · 后端开发 · Go 并发控制 缓存失效 请求合并 singleflight 回源
一个热门缓存键刚失效时,几百个请求可能同时回源,把数据库或下游接口推到峰值。Go 的 golang.org/x/sync/singleflight 能让同一个 key 的重叠调用只保留一趟加载,其余调用等待并复用结果。这里用一个商品读取场景说明放置位置、key 范围、多实例边界、错误传播和上线核对项。109 收藏 -
Go 的传统 encoding/json 会把 nil slice 编码为 null,把已初始化的空切片编码为 []。先由接口契约决定返回形状,再在成功响应的边界归一化并用测试锁定,避免前端空列表处理出现分支。392 收藏 -
Go 项目的 CI 不该只在最后跑一次 go test。把触发范围、最小权限、go vet、go test 和 go build 拆成可读阶段,PR 出问题时能更快定位,也不会把不需要的写权限交给工作流。485 收藏 -
Go 服务渲染首屏时,直接把 json.Marshal 结果转成 template.JS 很容易越过 html/template 的安全边界。更稳的做法是把结构体直接放在 script 的 JavaScript 值位置,让 html/template 按上下文生成安全 JSON;少量字段则用 data-* 属性。177 收藏 -
浏览器会在请求中带上 Sec-Fetch-Site 等 Fetch Metadata。用一层 Go 中间件先区分 same-origin、cross-site 和缺失请求头,再与 CSRF、Origin 校验配合,可以为敏感接口补上一道跨站访问边界。349 收藏 -
Golang · Go问答 | 5天前 | 云原生 · golang · 性能优化 · kubernetes · HPA · Go HPA不扩容 Kubernetes HPA CPU resources requests HPA并发指标 Go服务扩缩容
Go 服务部署到 Kubernetes 后,HPA 没有按预期扩容,常见原因不是 HPA 失效,而是 CPU 利用率与 requests 的关系、业务真实瓶颈和缩放行为没有对齐。本文用最小 HPA 配置说明何时选 CPU、何时考虑并发或队列指标,以及如何避免扩缩容抖动。111 收藏