Go プログラミングでは、関数とゴルーチンが連携して同時実行性を実現します。ゴルーチンは関数内に作成され、関数のローカル変数はゴルーチン内で表示されます。 goroutine は、実際の戦闘で、同時ファイルのアップロードなどの同時処理タスクに使用でき、異なるファイルのアップロードを担当する goroutine を作成することで効率を向上できます。 goroutine を使用する場合は、リソース不足を避けるために適切な量の goroutine を作成してください。goroutine には戻り値がなく、結果を取得するには同時実行プリミティブを使用する必要があります。goroutine を直接停止したりキャンセルしたりすることはできません。
Go プログラミング言語における goroutine は、コードを実行する軽量のスレッドを作成できる同時実行メカニズムです。関数とゴルーチンは連携して効率的な同時プログラミングを実現します。
ゴルーチンは関数内で作成でき、関数内のローカル変数と定数はゴルーチン内で表示されます。 Goroutine が終了すると、そのローカル変数と定数はリサイクルされます。
次の例は、ゴルーチンを作成し、関数にパラメータを渡す方法を示しています。
package main import ( "fmt" "time" ) func printHello(name string) { fmt.Printf("Hello, %s!\n", name) } func main() { go printHello("World") time.Sleep(1 * time.Second) }
上の例では、main
関数はゴルーチンを作成し、パラメータを渡します。 ### "世界"###。 goroutine は printHello
関数を実行し、"Hello, World!\n"
を出力します。 実用的なケース: ファイルの同時アップロード
package main import ( "context" "fmt" "io" "os" "path/filepath" "time" "cloud.google.com/go/storage" ) func uploadFile(w io.Writer, bucketName, objectName string) error { ctx := context.Background() client, err := storage.NewClient(ctx) if err != nil { return fmt.Errorf("storage.NewClient: %v", err) } defer client.Close() f, err := os.Open(objectName) if err != nil { return fmt.Errorf("os.Open: %v", err) } defer f.Close() ctx, cancel := context.WithTimeout(ctx, time.Second*30) defer cancel() o := client.Bucket(bucketName).Object(objectName) wc := o.NewWriter(ctx) if _, err := io.Copy(wc, f); err != nil { return fmt.Errorf("io.Copy: %v", err) } if err := wc.Close(); err != nil { return fmt.Errorf("Writer.Close: %v", err) } fmt.Fprintf(w, "File %v uploaded to %v.\n", objectName, bucketName) return nil } func main() { bucketName := "bucket-name" objectNames := []string{"file1.txt", "file2.txt", "file3.txt"} for _, objectName := range objectNames { go uploadFile(os.Stdout, bucketName, objectName) } }
この場合、
main 関数ゴルーチンのリストが作成されます。各ゴルーチンはオペレーティング システムからファイルを読み取り、Google Cloud Storage にアップロードします。これにより、アプリケーションは複数のファイルを同時にアップロードできるようになり、パフォーマンスが大幅に向上します。 注意事項
以上がgolang 関数と goroutine の連携の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。