コルーチンと関数は連携します: コルーチンを作成します: コルーチンを作成するには go キーワードを使用します。並列タスク: 並列タスクはコルーチンを通じて処理されます。関数のコラボレーション: コルーチンと Golang 関数は連携して、ファイルの並列ダウンロードなど、より複雑な同時タスクを実装します。実用的なアプリケーション: コルーチンは、並列 I/O、Web サーバー、アルゴリズムの同時実行性、分散システムなどのシナリオで広く使用されています。
Go コルーチンと Golang 関数の共同作業メカニズム
はじめに
Go コルーチンは、開発者が同じスレッドで並行して実行する複数の関数を作成および管理できる軽量の同時実行モデルです。コルーチンは、並列タスクの処理、同時 I/O 操作の実装、Web サーバーでのリクエストの並列処理など、多くのシナリオで役立ちます。
コルーチンの作成
コルーチンは、go
キーワードを使用して作成できます。たとえば、次のコードは、「hello world」を出力するコルーチンを作成します。
package main import ( "fmt" "time" ) func main() { go func() { fmt.Println("hello world") }() time.Sleep(1 * time.Second) }
Golang 関数とコルーチンは連携して動作します
Go コルーチンと Golang 関数は連携して動作しますより複雑な同時タスクを実装します。たとえば、次のコードではコルーチンを使用してファイルの並列ダウンロードを実装しています。
package main import ( "fmt" "io" "log" "net/http" ) func main() { urls := []string{"https://example.com/file1", "https://example.com/file2"} for _, url := range urls { go func(url string) { resp, err := http.Get(url) if err != nil { log.Fatal(err) } defer resp.Body.Close() // 保存文件到本地磁盘 out, err := os.Create(filepath.Base(url)) if err != nil { log.Fatal(err) } defer out.Close() if _, err := io.Copy(out, resp.Body); err != nil { log.Fatal(err) } fmt.Printf("File downloaded: %s\n", filepath.Base(url)) }(url) } // 主程序等待协程完成 for { time.Sleep(1 * time.Second) } }
実用的なケース
コルーチンは実際のアプリケーションで非常に役立ちます。一般的なシナリオの一部を次に示します。
以上がGo コルーチンと Golang 関数の共同作業メカニズムの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。