首页 > 文章列表 > main 函数是否运行一个 goroutine?

main 函数是否运行一个 goroutine?

golang
312 2023-04-23

问题内容

main 函数是否运行一个 goroutine?

正确答案

在 Golang 中,main 函数本身并不运行在 goroutine 中,而是在主线程中运行的。

当程序启动时,Go 运行时会创建一个 goroutine 来执行 main 函数,同时还会创建一个主线程(也称为系统线程),main 函数在该主线程中执行。因此,可以认为 main 函数是在主线程中运行的,而不是在 goroutine 中运行的。

当然,在 main 函数中可以通过创建新的 goroutine 来并发地执行任务,这些 goroutine 是由 main 函数启动的。但是,main 函数本身不会运行在 goroutine 中。

以下是一个简单的示例,演示了如何在 main 函数中创建新的 goroutine:

package main

import (
	"fmt"
	"time"
)

func main() {
	fmt.Println("start")

	go func() {
		time.Sleep(1 * time.Second)
		fmt.Println("goroutine finished")
	}()

	fmt.Println("end")
	time.Sleep(2 * time.Second)
}

在上面的示例中,我们在 main 函数中创建了一个新的 goroutine,该 goroutine 等待1秒钟后打印一条消息。然后,main 函数继续执行并打印了另一条消息,然后暂停2秒钟以等待 goroutine 完成。运行此程序将输出以下内容:

start
end
goroutine finished

可以看到,main 函数本身是在主线程中执行的,而新创建的 goroutine 在另一个线程中并发执行。