Golang中从main()函数创建Goroutine的方法
Golang中从main()函数创建Goroutine的方法 你好,我是Go语言的新手……我有一个简单的问题……我们可以从非主函数中调用goroutine吗?
在我目前看到的所有示例中……都只是从main()函数中调用……
2 回复
你好,@Subhash_Nair,当你提到“调用 goroutine”时,我理解你指的是 go f() 这种形式,其中 f 是一个函数。这个表达式会启动一个新的 goroutine 来执行函数 f。如果是这个意思,那么是的,你完全可以在 main 函数之外启动 goroutine。
更多关于Golang中从main()函数创建Goroutine的方法的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
是的,完全可以从非主函数中创建Goroutine。Goroutine的创建不依赖于特定的函数,关键在于使用go关键字。
示例代码:
package main
import (
"fmt"
"time"
)
// 普通函数中创建Goroutine
func createGoroutineFromFunction() {
go func() {
fmt.Println("Goroutine从普通函数启动")
time.Sleep(100 * time.Millisecond)
}()
}
// 结构体方法中创建Goroutine
type Worker struct {
name string
}
func (w *Worker) Start() {
go func() {
fmt.Printf("Worker %s 启动的Goroutine\n", w.name)
time.Sleep(150 * time.Millisecond)
}()
}
func main() {
// 从main函数创建Goroutine
go func() {
fmt.Println("Goroutine从main函数启动")
time.Sleep(50 * time.Millisecond)
}()
// 从普通函数创建Goroutine
createGoroutineFromFunction()
// 从结构体方法创建Goroutine
worker := &Worker{name: "Worker1"}
worker.Start()
// 等待所有Goroutine执行
time.Sleep(200 * time.Millisecond)
fmt.Println("主程序结束")
}
输出结果示例:
Goroutine从main函数启动
Goroutine从普通函数启动
Worker Worker1 启动的Goroutine
主程序结束
关键点:
- 任何函数中都可以使用
go关键字启动Goroutine - Goroutine的创建位置不影响其执行
- 需要确保主程序等待足够时间让Goroutine完成(实际项目中通常使用sync.WaitGroup或channel)

