vault backup: 2026-05-18 18:44:01
This commit is contained in:
@@ -56,6 +56,26 @@ func main() {
|
||||
}
|
||||
```
|
||||
|
||||
> **为什么必须用 goroutine?**
|
||||
> `ListenAndServe()` 是**永久阻塞**调用——它会一直 accept 连接,永不返回。
|
||||
> 如果直接放在 `main()` 中执行,后面的信号监听和 Shutdown 逻辑永远走不到:
|
||||
>
|
||||
> ```
|
||||
> main()
|
||||
> ├─ srv.ListenAndServe() ← 阻塞!永不返回
|
||||
> ├─ <-quit ← 永远不会执行 ❌
|
||||
> └─ srv.Shutdown() ← 永远不会执行 ❌
|
||||
> ```
|
||||
>
|
||||
> 放进 goroutine 后,"服务运行"和"信号监听"两个任务并行:
|
||||
>
|
||||
> ```
|
||||
> main() 主协程
|
||||
> ├─ [goroutine] srv.ListenAndServe() ← 后台阻塞,不挡路
|
||||
> ├─ <-quit ← ✅ 正常阻塞等待信号
|
||||
> └─ srv.Shutdown() ← ✅ 收到信号后执行
|
||||
> ```
|
||||
|
||||
**流程图:**
|
||||
|
||||
```mermaid
|
||||
|
||||
Reference in New Issue
Block a user