Лучше выбрать диапазон или использовать выбор? - PullRequest
1 голос
/ 15 мая 2019

ребята, мне было интересно, лучше ли выбирать диапазон канала или использовать select, если у меня есть только один случай (мой канал) и я сигнализирую об окончании с закрытием данного канала?

Приведены примеры:

1. https://play.golang.org/p/3ZFdbgHSKyN

go func() {
    for v := range ch {
        // do some stuff
    }
}()

2. https://play.golang.org/p/iCCkDge8j72

go func() {
    for {
        select {
        case v, ok := <-ch:
            if !ok {
                return
            }

            // do some stuff
        }
    }
}()

Какое решение было бы предпочтительным и почему? Пожалуйста, примите во внимание тот факт, что горутины как таковые могут порождаться много раз (многие рабочие).

1 Ответ

0 голосов
/ 15 мая 2019

Если нет другой ветви выбора, используйте следующее:

for v := range ch {
    // do some stuff
}

Код проще и понятнее, чем for / select, представленный в вопросе.

Если выпо какой-то причине необходимо выполнить прием внутри цикла, а затем использовать следующий код:

 for  { 
     // do some stuff
     v, ok := <-ch
     if !ok { 
        break 
     } 
     // do some other stuff
 }

Как правило, следует избегать операторов выбора одной ветви.Выбор с одной ветвью функционально такой же, как и одна ветвь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...