GOLANGTESTS Telegram 754
Что точно выведет программа на экран при запуске?

Учитывай, что используется 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 при чтении из канала — если данных нет, выбирается 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



tgoop.com/golangtests/754
Create:
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 при чтении из канала — если данных нет, выбирается 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

View MORE
Open in Telegram


Telegram News

Date: |

Deputy District Judge Peter Hui sentenced computer technician Ng Man-ho on Thursday, a month after the 27-year-old, who ran a Telegram group called SUCK Channel, was found guilty of seven charges of conspiring to incite others to commit illegal acts during the 2019 extradition bill protests and subsequent months. In handing down the sentence yesterday, deputy judge Peter Hui Shiu-keung of the district court said that even if Ng did not post the messages, he cannot shirk responsibility as the owner and administrator of such a big group for allowing these messages that incite illegal behaviors to exist. The channel also called on people to turn out for illegal assemblies and listed the things that participants should bring along with them, showing prior planning was in the works for riots. The messages also incited people to hurl toxic gas bombs at police and MTR stations, he added. 1What is Telegram Channels? Administrators
from us


Telegram Go tests
FROM American