Чтение из канала Golang
Код работает. Но я не понимаю почему он работает в целом, если у меня есть два канала на чтение из select, но нигде нет ни одного канала на запись (или буфера откуда будет происходить чтение).
Я понимаю, что time.After и Done() возвращают значения типа chan, но разве у меня горутина не станет в очередь, ибо на запись ничего нет (и буфера также)?
package main
import (
"context"
"fmt"
"time"
)
const shortDuration = 500 * time.Millisecond
func main() {
d := time.Now().Add(shortDuration)
ctx, cancel := context.WithDeadline(context.Background(), d)
if cancel != nil {
ctx.Err()
}
select {
case <-time.After(1 * time.Second):
fmt.Println("overslept")
case <-ctx.Done():
fmt.Println(ctx.Err())
}
}