Sobes.tech
Назад к вопросам
Senior
3

Что возвращает range каналов? Валидна ли запись: for _, c := range chs?

Компании, где спрашивали
01.tech

Ответ от нейросети

sobes.tech AI

В Go оператор range при обходе канала возвращает два значения: первое — значение, полученное из канала, второе — булево значение, указывающее, открыт ли канал (true, если открыт, false — если закрыт).

Однако, если использовать range в цикле по каналу, например:

for v := range ch {
    // обработка v
}

то цикл будет получать значения из канала до тех пор, пока канал не будет закрыт. В этом случае range возвращает только значение из канала, а не два значения.

Что касается записи for _, c := range chs, где chs — это слайс каналов, то да, такая запись валидна. При обходе слайса range возвращает индекс и значение. Если индекс не нужен, его можно заменить на _. Например:

for _, c := range chs {
    // c — канал из слайса chs
}

Таким образом, range по слайсу каналов возвращает индекс и канал, и запись for _, c := range chs корректна.