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.