函數生命週期:宣告與編譯:編譯器驗證函式的語法和型別。執行:函數呼叫時執行。返回:執行完畢後返回呼叫位置。 Goroutine 生命週期:建立和啟動:透過 go 關鍵字建立並啟動。執行:異步運行直到完成任務。結束:任務完成或出現錯誤時結束。清理:垃圾回收器清理結束的 Goroutine 所佔用的記憶體。
在Golang 中,函數宣告後立即被編譯,而執行過程發生在運行時。函數的生命週期如下:
Goroutine 是 Go 語言中的輕量級執行緒。它的生命週期如下:
go
關鍵字建立 Goroutine 並立即啟動。 考慮以下案例:我們想要並行執行多個任務,例如計算素數的清單。
package main import ( "fmt" "sync" "time" ) // 函数检查给定数字是否是素数。 func isPrime(n int) bool { if n <= 1 { return false } for i := 2; i*i <= n; i++ { if n%i == 0 { return false } } return true } func main() { // 创建一个等待组以等待所有 Goroutine 完成。 var wg sync.WaitGroup // 创建和启动一个 Goroutine 来检查每个数字是否是素数。 for i := 1; i <= 100; i++ { wg.Add(1) go func(i int) { defer wg.Done() // Goroutine 完成后调用 Done() 以减少等待组计数。 if isPrime(i) { fmt.Println(i) } }(i) } // 等待所有 Goroutine 完成。 wg.Wait() }
在這個案例中:
isPrime
函數負責檢查給定的數字是否是質數。 main
函數建立和啟動一個 Goroutine 來並行檢查每個數字是否為素數。 sync.WaitGroup
用於確保在所有 Goroutine 完成之前主程式不會退出。 defer wg.Done()
確保每個 Goroutine 在完成時減少等待群組計數。 以上是golang函數與goroutine的生命週期的詳細內容。更多資訊請關注PHP中文網其他相關文章!