在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執行完畢。