Go教程
已收录文章:112篇
-
调用 time.Ticker.Stop 后,程序仍可能处理一次已经进入通道的时间值。关键不在于 Stop 会不会清空通道,而在于退出信号、通道消费和任务收尾的顺序。本文用可运行示例拆开这个边界。363 收藏
-
Go 文件下载接口不能只把用户传入的 path 直接 Join 后打开。安全做法是固定下载根路径,先做 Clean,再确认最终路径没有越界,同时配合扩展名白名单、大小限制、只读打开和审计记录。362 收藏
-
Go 里遇到批量校验、批量关闭资源、批量处理任务时,不必只返回第一个错误。errors.Join 可以把多个 error 合成一个 error,同时保留 errors.Is、errors.As 的匹配能力,并且对 nil 有明确兼容规则。352 收藏
-
Golang · Go教程 | 4个月前 | singleflight · 并发编程 · Go教程 · 后端工程 · Golang实战 · 缓存治理 · golang Go 并发控制 缓存击穿 请求合并 后端工程 生产实践 singleflight从热点 Key 缓存失效导致并发回源的线上场景出发,讲清 Go singleflight 的 Do、DoChan、shared、Forget、错误传播、超时边界和上线观测。350 收藏
-
通过一个后端服务调用第三方接口的案例,演示 Go context.WithTimeout、defer cancel、HTTP 请求取消、错误判断和常见坑,避免接口一直等待。346 收藏
-
Golang · Go教程 | 3个月前 | 错误处理 · Context · 并发控制 · Go教程 · 并发控制 Go教程 context取消 context.WithCancelCause context.Causecontext.WithCancelCause 适合在请求链路中保留明确取消原因,让子任务不只知道 context canceled,还能知道是权限拒绝、上游失败还是主动终止。落地时要区分系统取消和业务错误。342 收藏
-
本文用一个完整 Go HTTP 服务示例,讲清楚如何在收到 SIGTERM 后先摘流,再等待请求完成,最后用超时上下文关闭服务,避免发布和重启时丢请求。340 收藏
-
Golang · Go教程 | 3个月前 | CI/CD · gitHub actions · Go教程 · 持续集成 · Go 持续集成 CI Go test GitHub Actions self-hosted runner 自托管 runnerGitHub Actions 自托管 runner 开始恢复最低版本要求,Go 项目不要只盯着能不能跑 go test,而要盘点 runner 版本、镜像来源、负载分层和升级节奏,避免测试、构建、发布流水线在强制执行窗口里排队或失败。340 收藏
-
围绕 Go 1.24 正式支持的泛型类型别名,讲清 type Alias[T] = ... 的语义、约束写法、API 迁移、兼容测试和公共库使用边界。339 收藏
-
Go 1.24 完整支持带类型参数的别名声明。本文用一个从 legacy 包迁移到 collection 包的 Set API,比较 type 定义与 type 别名的差异,说明方法、导出类型、go.mod 版本和工具链兼容边界。335 收藏
-
本文用 Go 批量处理文件时出现打开失败的案例,逐步复现 defer 放在循环里的句柄堆积问题,并通过封装单文件处理函数让 Close 及时触发,最后给出复查清单。332 收藏
-
Go 的 sync.Once 适合做只读配置、规则表和重量级客户端的懒加载。它解决的不是语法问题,而是并发场景下只初始化一次、结果复用和失败边界怎么处理的问题。331 收藏