Golang中怎么創(chuàng)建和管理goroutine

小億
87
2024-03-13 17:50:54

在Golang中,可以使用關(guān)鍵字go來(lái)創(chuàng)建一個(gè)goroutine。一個(gè)goroutine是一個(gè)輕量級(jí)的線程,它可以并發(fā)執(zhí)行代碼。

下面是一個(gè)簡(jiǎn)單的例子,展示如何創(chuàng)建一個(gè)goroutine:

package main

import (
	"fmt"
	"time"
)

func sayHello() {
	for i := 0; i < 5; i++ {
		fmt.Println("Hello")
		time.Sleep(1 * time.Second)
	}
}

func main() {
	go sayHello()

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

在上面的例子中,sayHello函數(shù)被包裝在一個(gè)goroutine中,通過(guò)go sayHello()來(lái)創(chuàng)建一個(gè)goroutine。在main函數(shù)中,我們也打印了一條消息并讓主函數(shù)休眠2秒,以便給goroutine一些時(shí)間來(lái)執(zhí)行。

如果想要管理goroutine,可以使用sync.WaitGroup來(lái)等待goroutine的執(zhí)行結(jié)束。下面是一個(gè)例子:

package main

import (
	"fmt"
	"sync"
)

func sayHello(wg *sync.WaitGroup) {
	defer wg.Done()
	fmt.Println("Hello")
}

func main() {
	var wg sync.WaitGroup
	wg.Add(1)

	go sayHello(&wg)

	wg.Wait()
	fmt.Println("Main function")
}

在上面的例子中,我們創(chuàng)建了一個(gè)sync.WaitGroup,并在goroutine中調(diào)用wg.Done()來(lái)標(biāo)記goroutine的完成。在main函數(shù)中,我們使用wg.Wait()來(lái)等待goroutine的執(zhí)行結(jié)束。

通過(guò)以上方法,我們可以創(chuàng)建和管理goroutine。需要注意的是,goroutine是輕量級(jí)的線程,因此可以創(chuàng)建大量的goroutine來(lái)實(shí)現(xiàn)并發(fā)執(zhí)行。

0