Heim >Backend-Entwicklung >Golang >Zusammenarbeit zwischen Golang-Funktion und Goroutine

Zusammenarbeit zwischen Golang-Funktion und Goroutine

PHPz
PHPzOriginal
2024-04-29 12:06:01417Durchsuche

Bei der Go-Programmierung arbeiten Funktionen und Goroutinen zusammen, um Parallelität zu erreichen. Eine Goroutine wird in einer Funktion erstellt und die lokalen Variablen der Funktion sind in der Goroutine sichtbar. Goroutine kann im tatsächlichen Kampf für gleichzeitige Verarbeitungsaufgaben verwendet werden, beispielsweise für das gleichzeitige Hochladen von Dateien. Die Effizienz kann durch die Erstellung von Goroutinen verbessert werden, die für das Hochladen verschiedener Dateien verantwortlich sind. Bitte beachten Sie bei der Verwendung von Goroutine: Erstellen Sie Goroutine in einer angemessenen Menge, um Ressourcenknappheit zu vermeiden. Goroutine hat keinen Rückgabewert und Sie müssen Parallelitätsprimitive verwenden, um Ergebnisse zu erhalten. Goroutine kann nicht direkt gestoppt oder abgebrochen werden.

Zusammenarbeit zwischen Golang-Funktion und Goroutine

Zusammenarbeit zwischen Go-Funktionen und Goroutine

In der Programmiersprache Go ist Goroutine ein Parallelitätsmechanismus, der leichtgewichtige Threads zum Ausführen von Code erstellen kann. Funktionen und Goroutinen arbeiten zusammen, um eine effiziente gleichzeitige Programmierung zu erreichen.

Die Verbindung zwischen Funktion und Goroutine

Goroutine kann innerhalb der Funktion erstellt werden und die lokalen Variablen und Konstanten in der Funktion sind in der Goroutine sichtbar. Wenn eine Goroutine endet, werden ihre lokalen Variablen und Konstanten wiederverwendet.

Das folgende Beispiel zeigt, wie man eine Goroutine erstellt und Parameter in einer Funktion übergibt:

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)
}

Im obigen Beispiel erstellt die Funktion main eine Goroutine und übergibt den Parameter "World" . Die Goroutine führt die Funktion printHello aus und gibt "Hello, World!n" aus. main 函数创建一个 goroutine 并传入参数"World"。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

Praktischer Fall: Gleichzeitiges Hochladen von Dateien

Stellen Sie sich einen Anwendungsfall vor, der das gleichzeitige Hochladen mehrerer Dateien erfordert:

rrreee

In diesem Fall erstellt die Funktion main eine Liste von Goroutinen, jede Goroutine aus dem Betriebssystem Lesen Sie eine Datei und laden Sie sie in Google Cloud Storage hoch. Dadurch können Anwendungen mehrere Dateien gleichzeitig hochladen, was die Leistung erheblich verbessert.
  • Hinweise
  • Bei der Verwendung von Goroutinen müssen Sie Folgendes beachten:
  • Goroutinen sind leichtgewichtig, daher ist es einfach, eine große Anzahl von Goroutinen zu erstellen. Stellen Sie sicher, dass Sie nicht zu viele Goroutinen erstellen und das Programm nicht mit Ressourcen belasten.
🎜Goroutine wird ohne Rückgabewert beendet. Wenn Sie die Ergebnisse einer Goroutine erhalten möchten, verwenden Sie Kanäle oder andere Parallelitätsprimitive. 🎜🎜Goroutinen sind anonym, daher können einzelne Goroutinen nicht direkt gestoppt oder abgebrochen werden. 🎜🎜

Das obige ist der detaillierte Inhalt vonZusammenarbeit zwischen Golang-Funktion und Goroutine. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn