共计 1317 个字符,预计需要花费 4 分钟才能阅读完成。
在 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 是并发执行的,因此 sayHello
和sayWorld
函数会交替打印输出,而不是按顺序执行。
需要注意的是,在上面的例子中我们使用了 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 执行完毕。
丸趣 TV 网 – 提供最优质的资源集合!