Go HTTP 服务器的优雅关闭
使用 signal.NotifyContext 和 http.Server.Shutdown 安全关闭 Go HTTP 服务器,处理超时、WebSocket、辅助资源和 Kubernetes。
使用 signal.NotifyContext 和 http.Server.Shutdown 安全关闭 Go HTTP 服务器,处理超时、WebSocket、辅助资源和 Kubernetes。
Go 中 encoding/json 的使用指南,从 Marshal/Unmarshal、struct tag、Encoder/Decoder 到自定义类型,附带测试和常见错误。
如何使用 channel、sync.WaitGroup、context 和 errgroup 在 Go 中构建 worker pool,实现有限制的并发处理、支持取消和测试。
Go 没有继承。本文讲解 struct embedding 的工作方式、方法如何被"提升"、方法覆盖的陷阱以及如何将 embedding 与 interface 结合。
了解 Go 中的 defer、panic 和 recover 机制、常见陷阱,以及何时应该返回 error 而不是 panic。
使用 pprof 收集和分析 Go 应用的 CPU、heap、goroutine、block、mutex 数据的指南,覆盖从 HTTP 服务到基准测试。
了解Go中map的工作原理,为什么程序会因为"concurrent map writes"而崩溃,以及如何用sync.Mutex、sync.RWMutex、sync.Map来修复。
了解 slice 如何共享底层数组,len 和 cap 的作用,以及如何避免使用 append 时难以发现的数据覆盖错误。
学习使用 Go modules 来初始化项目、添加和升级依赖、处理主版本、replace 指令、go.work 以及私有模块。
掌握 Go 中的表驱动测试:使用 t.Run 创建子测试、处理错误检查、并行运行测试以及使用 go-cmp 比较复杂结构体,并学会避免常见错误。
使用 sync.WaitGroup 等待 goroutine,用 sync.Mutex 避免数据竞争,用 errgroup 汇总错误、通过 context 取消和限制 goroutine 数量。
通过 Order、Customer、Stack 和 Cache 示例,学习如何使用 type parameter、constraint、~ 符号以及 Go 中的泛型类型。
使用 Go 1.22 的 ServeMux 来匹配方法、读取路径参数并返回 JSON。您将拥有一个完整的 REST API,无需第三方路由器。
使用 %w 进行错误包装,通过 errors.Is 在包装链中检查错误,用 errors.As 获取自定义错误,用 errors.Join 合并错误,以及常见的错误。
Go 的接口满足是隐式的。本文指导如何保持接口小巧、将它们放在使用方、用伪实现进行测试,并避免 nil 接口错误。
学习如何在 Go 中使用 context.Context 来控制超时、截止时间、取消 goroutine 并安全地传递请求作用域的值。
Goroutine泄漏不会立即崩溃,而是悄悄地消耗RAM。本文指出常见原因、检测方法和彻底的修复方案。
了解 Go 如何通过 goroutine 和 channel 处理并发,从基础到实战模式如 WaitGroup、select 和 context。