Sobes.tech
Back to questions
Middle+
3

package main import ( "fmt" "time" ) func main() { ch := make(chan int) go func() { ch <- 1 }() time.Sleep(time.Millisecond * 500) close(ch) for i := range ch { fmt.Println(i) } time.Sleep(time.Millisecond * 100) }

Companies where asked
МВидеоМВидео

Answer from AI

sobes.tech AI

В данном коде создаётся канал ch типа chan int, затем запускается горутина, которая отправляет в канал значение 1. После паузы в 500 миллисекунд канал закрывается.

Особенность: цикл for i := range ch читает из канала до тех пор, пока он не будет закрыт. В данном случае, поскольку в канал отправляется только одно значение, и канал закрывается после этого, цикл выведет 1.

Если убрать time.Sleep перед close(ch), то есть риск, что канал закроется до того, как горутина отправит значение, что приведёт к панике при попытке отправить в закрытый канал.

Пример вывода:

1

Таким образом, код демонстрирует корректное использование канала с отправкой, закрытием и чтением через range.