Go教程技术文章
-
Golang · Go教程 | 2个月前 | HTTP · Go教程 · 服务治理 · SIGTERM Go 优雅关闭 http.Server Shutdown Go HTTP 服务 连接收尾 服务下线
Go HTTP 服务下线时,直接退出会打断进行中的请求;只调用 Shutdown 又可能无限等待。本文结合 net/http 官方行为说明信号接收、流量摘除、超时预算、长连接和依赖收尾应该怎样拆分。316 收藏 -
Go 1.20 的 errors.Join 可以把多条错误合并为一个错误值,同时保留 errors.Is 和 errors.As 的判断能力。本文用批量关闭资源、并行任务汇总等场景说明该怎么用,以及哪些时候不该把错误一股脑拼在一起。431 收藏 -
Go 服务 CPU 没满但请求排队、延迟升高,可能是共享锁竞争而不是算力不足。本文按运行手册说明如何判断信号、短时开启 mutex profile、定位持锁路径、做低风险修复并验证回归。395 收藏 -
部署一个很小的 Go Web 服务时,模板和静态文件常常成为额外的发布物。本文从零搭建一个使用 embed.FS 的小项目,把页面与资源编译进单一二进制,并说明目录、路由、验收和更新边界。255 收藏 -
多模块 Go 仓库本地联调顺利、CI 却找不到依赖,往往不是代码问题,而是工作区边界没有管理好。本文用一套可复用的工作流说明 go.work 的建立、验证、依赖同步和上线门禁。380 收藏 -
Go 1.23 支持对迭代器函数使用 range,并在标准库提供 iter.Seq 和 iter.Seq2。本文从调用方需求、参数语义、提前停止和兼容策略出发,说明何时返回切片,何时设计迭代器 API。234 收藏 -
Go 1.24 新增 os.Root,用于把文件操作限制在指定目录内。本文从不可信压缩包和上传文件的落盘链路出发,说明 os.OpenRoot、Root.Create 的用法、适用边界和迁移检查点。251 收藏 -
Go 1.26 将此前实验性的 Green Tea 垃圾回收器设为默认。升级后不能只看单次压测数字,本文从适用场景、指标基线、最小验证和临时回退开关整理一套可落地的检查方法。334 收藏 -
发布包、离线资料或备份文件交付前,手工比对文件很容易漏。本文用 Go 标准库做一个并发 SHA-256 清单工具:扫描目录、限制并发、稳定输出,再用同一份清单复查文件是否被改动。328 收藏 -
Golang · Go教程 | 2个月前 | 并发 · HTTP · 性能优化 · 故障排查 · Go教程 · Go Goroutine 连接复用 pprof http.Client close Response.Body
Go 服务里调用 http.Client 后,Response.Body 没有在所有路径关闭,连接会被持续占用,pprof 里常能看到 net/http 相关 goroutine 增长。用 defer resp.Body.Close()、完整处理响应体、复用 Client,并通过压测与连接指标复查,可以把这类问题收住。201 收藏 -
Go 1.22 调整了 for 循环变量的作用域,新模块里每轮循环会有自己的变量副本,能减少闭包和 goroutine 误读最后一轮值的问题。升级时要先看 go.mod、跑测试,再处理仍需要旧语义的特殊代码。113 收藏 -
Go 的 sync.Once 适合做只读配置、规则表和重量级客户端的懒加载。它解决的不是语法问题,而是并发场景下只初始化一次、结果复用和失败边界怎么处理的问题。331 收藏 -
Go 里遇到批量校验、批量关闭资源、批量处理任务时,不必只返回第一个错误。errors.Join 可以把多个 error 合成一个 error,同时保留 errors.Is、errors.As 的匹配能力,并且对 nil 有明确兼容规则。352 收藏 -
Golang · Go教程 | 2个月前 | Context · 超时控制 · Go教程 · Go context 请求超时 Transport http.Client Client.Timeout ResponseHeaderTimeout
Go HTTP 客户端超时不要只靠一个 context 或一个 Client.Timeout。更稳的做法是把总预算、连接、TLS 握手、响应头和读取阶段分开设置,再用错误判断和日志字段确认到底卡在哪一段。218 收藏 -
Go 文件下载接口不能只把用户传入的 path 直接 Join 后打开。安全做法是固定下载根路径,先做 Clean,再确认最终路径没有越界,同时配合扩展名白名单、大小限制、只读打开和审计记录。362 收藏