Я сделал go в течение некоторого времени, но до сих пор не могу понять, почему эти тупики (https://play.golang.org/p/INeUl_ktMJA):
package main
import (
"context"
"time"
)
func main() {
ctx, cancel := context.WithTimeout(context.Background(), 3*time.Second)
t := time.NewTicker(time.Second)
for range t.C {
select {
case <-ctx.Done():
t.Stop()
default:
print(".")
}
}
cancel()
}
Я ожидал бы закрытый контекст закрыть канал тикера, который должен выйти из диапазона l oop и таким образом очистить контекст. Вместо:
...fatal error: all goroutines are asleep - deadlock!
goroutine 1 [chan receive]:
main.main()
/Users/andig/htdocs/test.go:12 +0xaf
exit status 2