Go教程
已收录文章:90篇
-
Go 1.21 引入的 clear 可以清空 map 或 slice,但两者的结果并不一样:map 保留对象并删除键值,slice 只把元素置为零值且长度容量不变。本文用缓存重建和批处理缓冲两个场景,说明 clear 的行为、引用影响、容量边界和可验证的复用写法。384 收藏
-
Golang · Go教程 | 1星期前 | 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教程 | 2星期前 | 文件下载 · Go教程 · 审计日志 · 接口安全 · 路径穿越 · Go 文件下载 审计日志 HTTP接口 filepath.Clean 安全下载 路径穿越Go 文件下载接口不能只把用户传入的 path 直接 Join 后打开。安全做法是固定下载根路径,先做 Clean,再确认最终路径没有越界,同时配合扩展名白名单、大小限制、只读打开和审计记录。362 收藏
-
Golang · Go教程 | 2星期前 | 单元测试 · 错误处理 · Go教程 · errors.Join · errors.Is · errors.Is Go错误处理 Go教程 errors.Join 多错误返回 批量校验Go 里遇到批量校验、批量关闭资源、批量处理任务时,不必只返回第一个错误。errors.Join 可以把多个 error 合成一个 error,同时保留 errors.Is、errors.As 的匹配能力,并且对 nil 有明确兼容规则。352 收藏
-
Golang · Go教程 | 1个月前 | singleflight · 并发编程 · Go教程 · 后端工程 · Golang实战 · 缓存治理 · golang Go 并发控制 缓存击穿 请求合并 后端工程 生产实践 singleflight从热点 Key 缓存失效导致并发回源的线上场景出发,讲清 Go singleflight 的 Do、DoChan、shared、Forget、错误传播、超时边界和上线观测。350 收藏
-
通过一个后端服务调用第三方接口的案例,演示 Go context.WithTimeout、defer cancel、HTTP 请求取消、错误判断和常见坑,避免接口一直等待。346 收藏
-
Golang · Go教程 | 2星期前 | 错误处理 · Context · 并发控制 · Go教程 · 并发控制 Go教程 context取消 context.WithCancelCause context.Causecontext.WithCancelCause 适合在请求链路中保留明确取消原因,让子任务不只知道 context canceled,还能知道是权限拒绝、上游失败还是主动终止。落地时要区分系统取消和业务错误。342 收藏
-
Golang · Go教程 | 2星期前 | CI/CD · gitHub actions · Go教程 · 自托管 Runner · 持续集成 · Go 持续集成 CI Go test GitHub Actions self-hosted runner 自托管 runnerGitHub Actions 自托管 runner 开始恢复最低版本要求,Go 项目不要只盯着能不能跑 go test,而要盘点 runner 版本、镜像来源、负载分层和升级节奏,避免测试、构建、发布流水线在强制执行窗口里排队或失败。340 收藏
-
本文用一个完整 Go HTTP 服务示例,讲清楚如何在收到 SIGTERM 后先摘流,再等待请求完成,最后用超时上下文关闭服务,避免发布和重启时丢请求。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 收藏