# Goroutine 与主线程

URL: https://caijiao.org/go/04-concurrency/02-main-thread
Source: docs/go/04-concurrency/02-main-thread.md
Description: 本节介绍 Goroutine 与主线程（主 Goroutine）之间的关系及协作方式。

## 1. 主 Goroutine

Go 程序启动时，主函数 `main()` 在主 Goroutine 中运行。

## 2. Goroutine 并发执行

通过 `go` 关键字启动新的 Goroutine，实现与主 Goroutine 并发执行。

```go
func printMessage(msg string) {
    fmt.Println(msg)
}

func main() {
    go printMessage("Hello from Goroutine")
    fmt.Println("Hello from main Goroutine")
    time.Sleep(time.Second)  // 等待子 Goroutine 执行
}
````

## 3. 主 Goroutine 退出影响

主 Goroutine 退出时，程序终止，所有其他 Goroutine 也会停止执行。

## 4. 同步等待

常用 `sync.WaitGroup` 等工具确保所有 Goroutine 执行完成：

```go
var wg sync.WaitGroup
wg.Add(1)

go func() {
    defer wg.Done()
    fmt.Println("Goroutine working")
}()

wg.Wait()
fmt.Println("All goroutines done")
```

---

理解 Goroutine 与主线程的关系，有助于正确编写并发程序。
