関数のライフサイクル: 宣言とコンパイル: コンパイラーは関数の構文と型を検証します。実行: 関数が呼び出されたときに実行されます。 Return: 実行後、呼び出し元の場所に戻ります。 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
関数は、各数値が素数であるかどうかを並行してチェックするゴルーチンを作成して開始します。 sync.WaitGroup
すべてのゴルーチンが完了する前にメイン プログラムが終了しないようにするために使用されます。 defer wg.Done()
各ゴルーチンが完了時に待機グループのカウントをデクリメントするようにします。 以上がGolang 関数と goroutine のライフサイクルの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。