Der Kanal ähnelt in gewisser Weise einer Pipeline. Er spielt eine Rolle bei der Goroutine-Synchronisierung und -Kommunikation. Er ist auch der Schlüssel zum CSP-Modell.
Die meisten Typen in Golang sind Werttypen (nur Slice/Channel/Map sind Referenztypen). Wenn der Lese-/Schreibtyp ein Kanal vom Werttyp ist und die Elementgröße relativ groß ist, sollten Zeiger verwendet werden Vermeiden Sie stattdessen häufigen Speicherkopieraufwand.
Golangs Methode zur Bestimmung, ob ein Kanal geschlossen wurde:
Bestimmen Sie beim Lesen eines Kanals, ob er geschlossen wurde
_,ok := <- jobs
Wenn der Kanal zu diesem Zeitpunkt geschlossen ist, ist der ok-Wert falsch
Stellen Sie beim Schreiben in den Kanal fest, ob er geschlossen wurde
1 := <- Jobs
Wenn der Kanal zu diesem Zeitpunkt geschlossen ist, ist der ok-Wert falsch. Wenn der Kanal nicht geschlossen ist, wird ein Job verpasst
2 Methode
zum Erstellen eines weiteren Kanals mit dem Namen „Timeout“. Wenn eine Zeitüberschreitung auftritt, senden Sie „true“ an diesen Kanal, senden Sie Daten an den Kanal der Jobs im Produzenten. Verwenden Sie „select“, um die Zeitüberschreitung zu überwachen. Wenn eine Zeitüberschreitung auftritt, schließen Sie die Kanal der Jobs.
go func() { time.Sleep(time.Second * 3) timeout <- true }()
go func() { for i := 0; ; i++ { select { case <-timeout: close(jobs) return default: jobs <- i fmt.Println("produce:", i) } } }()
Für mehr Golang-Wissen beachten Sie bitte die SpalteGolang-Tutorial.
Das obige ist der detaillierte Inhalt vonWie stellt Golang fest, dass der Kanal geschlossen wurde?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!