共計 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 網 – 提供最優質的資源集合!