温馨提示×

go语言多线程怎么使用

小亿
138
2023-08-31 02:53:40
栏目: 编程语言

在Go语言中,可以使用goroutine来实现多线程的功能。goroutine是Go语言中的轻量级线程,它可以在一个程序中同时执行多个任务。

使用goroutine非常简单,只需要在函数调用的前面加上关键字"go"即可。以下是一个示例:

package main import ( "fmt" "time" ) func sayHello() { for i := 0; i < 5; i++ { fmt.Println("Hello") time.Sleep(time.Millisecond * 500) } } func sayWorld() { for i := 0; i < 5; i++ { fmt.Println("World") time.Sleep(time.Millisecond * 500) } } func main() { go sayHello() // 启动一个新的goroutine执行sayHello函数 sayWorld() // 在主goroutine中执行sayWorld函数 // 等待一段时间,以保证其他goroutine有足够的时间执行完毕 time.Sleep(time.Second * 3) } 

在上面的例子中,我们通过go sayHello()启动了一个新的goroutine来执行sayHello函数,并且在主goroutine中继续执行sayWorld函数。由于goroutine是并发执行的,因此sayHellosayWorld函数会交替打印输出,而不是按顺序执行。

需要注意的是,在上面的例子中我们使用了time.Sleep函数来等待一段时间,以保证其他goroutine有足够的时间执行完毕。在实际开发中,可能需要使用更加复杂的同步机制来控制多个goroutine之间的协作。

除了使用go关键字启动goroutine外,还可以使用sync.WaitGroup来等待所有goroutine执行完毕。以下是一个使用sync.WaitGroup的示例:

package main import ( "fmt" "sync" ) func sayHello(wg *sync.WaitGroup) { defer wg.Done() // goroutine执行完毕后通知WaitGroup fmt.Println("Hello") } func sayWorld(wg *sync.WaitGroup) { defer wg.Done() // goroutine执行完毕后通知WaitGroup fmt.Println("World") } func main() { var wg sync.WaitGroup wg.Add(2) // 设置WaitGroup的计数器为2 go sayHello(&wg) go sayWorld(&wg) wg.Wait() // 等待所有goroutine执行完毕 } 

在上面的例子中,我们首先创建了一个sync.WaitGroup,并且通过wg.Add(2)将计数器设置为2,表示需要等待两个goroutine执行完毕。在每个goroutine的最后,我们使用wg.Done()通知WaitGroup,表示这个goroutine已经执行完毕。最后,我们使用wg.Wait()等待所有goroutine执行完毕。

0