Go教程技术文章
-
Golang · Go教程 | 2个月前 | HTTP · 路由 · Go教程 · Go1.22 · ServeMux · HTTP路由 ServeMux Go教程 Go1.22 PathValue 路由迁移
Go 1.22 的 net/http ServeMux 支持方法匹配和路径通配符。本文从旧的前缀路由迁移到 GET /posts/{id},讲清 PathValue 取参、405 行为、静态路由优先级与冲突模式的测试方法。377 收藏 -
一个全局 QPS 阈值只能挡住总流量,挡不住单个租户或重接口挤占资源。本文用 Go 的令牌桶限流器拆解全局、租户、接口三层配额的取舍、最小实现和观察指标。100 收藏 -
Golang · Go教程 | 2个月前 | https · cors · chrome · Go教程 · 浏览器权限 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教程 | 2个月前 | golang · 缓存 · singleflight · go · 高并发 · 后端开发 · Go 并发控制 缓存失效 请求合并 singleflight 回源
一个热门缓存键刚失效时,几百个请求可能同时回源,把数据库或下游接口推到峰值。Go 的 golang.org/x/sync/singleflight 能让同一个 key 的重叠调用只保留一趟加载,其余调用等待并复用结果。这里用一个商品读取场景说明放置位置、key 范围、多实例边界、错误传播和上线核对项。109 收藏 -
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 收藏 -
Golang · Go教程 | 2个月前 | 前端开发 · Go教程 · html/template · Go html/template CurrentPath 导航高亮 template.FuncMap Go网页模板
Go 服务端渲染页面时,导航高亮经常被写成散落在多个页面里的条件判断。文章给出 CurrentPath、NavItem 与 template.FuncMap 的最小组合:路由层传入页面状态,模板负责循环和 class 条件,CSS 只认 is-active,从而让新增菜单和单元测试都更轻松。409 收藏 -
Go 拼接文本时,strings.Builder、bytes.Buffer、[]byte 和 strings.Join 的选择取决于输出类型、是否需要读取字节以及片段是否已准备好。文章用最小示例、边界表和基准测试说明各自适用场景。188 收藏 -
Golang · Go教程 | 2个月前 | golang · 配置 · 设计模式 · go · client · api设计 · Go 构造函数 Functional Options 函数选项 Client 配置 API 兼容
Functional Options 适合“少量必填参数稳定、可选项会逐步增加”的 Go Client 构造场景。它能避免频繁改函数签名,并让调用点保留 WithTimeout、WithRetry 这类具名配置;但配置总是成组出现、需要从文件反序列化,或只有一个可选值时,Config 结构体或新增构造函数往往更直接。关键不在模式名称,而在默认值、重复选项与兼容边界是否明确。454 收藏 -
Golang · Go教程 | 2个月前 | golang · Timer · 并发编程 · time.After · 性能排查 · time.After go timer Go 1.23 NewTimer Timer.Reset Timer.Stop
Go 1.23 之后,未引用的 Timer 可以被垃圾回收,time.After 不再天然等于内存泄漏。但在高频超时循环里,仍要先区分分配波动、超时语义和取消需求;需要复用或主动取消时,再用 NewTimer、Stop 和 Reset 把边界写清楚。403 收藏 -
Golang · Go教程 | 2个月前 | 并发 · 错误处理 · go · Context · 排错 · Go 错误链 context.WithCancelCause context.Cause 取消原因
一次请求提前结束时,ctx.Err() 往往只剩下 context.Canceled。用 context.WithCancelCause 和 context.Cause 可以保留真正的中断原因,并把它用于日志、指标和调用方处理;关键是区分父子 Context 的先后关系。366 收藏 -
从一次发布后异步任务少处理的故障出发,拆解 Go worker pool 的关闭顺序:先停止接收、再关闭任务输入、让 worker 排空并由 WaitGroup 收尾,同时说明超时退出与任务持久化的边界。207 收藏 -
从一个大租户挤占接口容量的场景出发,讲清 Go 服务如何按全局、租户和路由拆分限流边界,单实例如何用 x/time/rate 落地,以及多实例为什么需要共享预算。294 收藏 -
Go 标准库 slices.Delete 会返回修改后的切片。本文用一个最小实验说明为什么必须接收返回值、底层数组何时仍被复用,以及批量删除时怎样避免循环删元素。463 收藏 -
Golang · Go教程 | 2个月前 | HTTP · Go教程 · 服务治理 · SIGTERM Go 优雅关闭 http.Server Shutdown Go HTTP 服务 连接收尾 服务下线
Go HTTP 服务下线时,直接退出会打断进行中的请求;只调用 Shutdown 又可能无限等待。本文结合 net/http 官方行为说明信号接收、流量摘除、超时预算、长连接和依赖收尾应该怎样拆分。316 收藏