tgoop.com/golangtests/754
Create:
Last Update:
Last Update:
❓ Что точно выведет программа на экран при запуске?
Учитывай, что используется default в select, и что между отправками и чтениями есть time.Sleep.
package main
import (
"fmt"
"time"
)
func main() {
ch := make(chan int)
done := make(chan struct{})
go func() {
defer close(done)
for i := 0; i < 3; i++ {
ch <- i
time.Sleep(100 * time.Millisecond)
}
close(ch)
}()
go func() {
for {
select {
case v, ok := <-ch:
if !ok {
fmt.Println("channel closed")
return
}
fmt.Println("received:", v)
default:
fmt.Println("default case")
time.Sleep(50 * time.Millisecond)
}
}
}()
<-done
time.Sleep(500 * time.Millisecond)
}
Хинт:
select
default
Ответ:
Одна горутина пишет 0, 1, 2 в канал ch с паузой 100мс, затем закрывает канал.
Вторая горутина читает из ch через select:
если данные есть → received: N
если нет → default case
если канал закрыт → channel closed
📤 Что выведет (примерно):
default case
default case
received: 0
default case
received: 1
default case
received: 2
channel closed
Порядок может немного отличаться из-за гонки между горутинами, но общая структура будет именно такая.
@golangtests
BY Go tests
Share with your friend now:
tgoop.com/golangtests/754