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
主程序结束

关键点:

  1. 任何函数中都可以使用go关键字启动Goroutine
  2. Goroutine的创建位置不影响其执行
  3. 需要确保主程序等待足够时间让Goroutine完成(实际项目中通常使用sync.WaitGroup或channel)
回到顶部