Heim >Backend-Entwicklung >Golang >Zusammenarbeit zwischen Golang-Funktion und Goroutine
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.
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.
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
rrreee
In diesem Fall erstellt die Funktionmain
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. 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!