Nebenläufigkeit in Go
Go select and Timeouts
Wait on several channels at once, give up after a timeout, or check without waiting.
Das lernst du
- select with several cases
- time.After
- default
select
case <-fastready after 10 mscase <-slowready after 200 mscase <-time.After(50ms)timeoutThe first ready channel wins
select waits for the first of several channel operations that is ready. It is how a goroutine listens to more than one channel, adds a timeout, or checks a channel without waiting.
The first select receives from fast because it is ready first. In the second, time.After delivers a value after 50 milliseconds, before slow is ready, so the timeout case runs. A default case runs at once when no channel is ready.
Das Wichtigste
- select runs the first case that is ready.
time.Afteradds a timeout.- default runs when nothing is ready.
Ausführbares Go-Beispiel
main.go
package main
import (
"fmt"
"time"
)
func main() {
fast := make(chan string)
slow := make(chan string)
go func() {
time.Sleep(10 * time.Millisecond)
fast <- "fast result"
}()
go func() {
time.Sleep(200 * time.Millisecond)
slow <- "slow result"
}()
select {
case message := <-fast:
fmt.Println(message)
case message := <-slow:
fmt.Println(message)
}
select {
case message := <-slow:
fmt.Println(message)
case <-time.After(50 * time.Millisecond):
fmt.Println("timed out waiting for slow")
}
ready := make(chan int)
select {
case value := <-ready:
fmt.Println(value)
default:
fmt.Println("nothing ready, moving on")
}
}
fast result
timed out waiting for slow
nothing ready, moving onÜben
Öffne das Beispiel im Online-Compiler, ändere einen Wert oder füge eine Zeile hinzu und sage die Ausgabe voraus, bevor du es ausführst. Bring den Code danach absichtlich zum Scheitern und lies die Meldung des Compilers.
Lektion fertig?
Markiere sie als gelernt, um deinen Fortschritt zu verfolgen.
Dein Fortschritt ist in diesem Browser gespeichert Melde dich an, um ihn auf jedem Gerät zu behalten.
Mit einer Challenge üben
Nutze den Inhalt dieser Lektion, um ein echtes Problem zu lösen. Jede Challenge läuft im Browser, mit sofortigen Tests und einem KI-Review.
Alle Challenges