Ваши рассуждения верны, формулировка на сайте не совсем понятна. Эта «конструкция» достигает того, что горутины не будут навсегда зависать, но как только поиск завершится, горутины закончатся должным образом. Там больше ничего не происходит.
Как правило, вы не можете прерывать любую процедуру снаружи, сама программа должна поддерживать какое-то завершение (например, канал отключения, context.Context
и т. Д.). См. Отмена операции блокировки в Go .
Так что да, в примере, который вы разместили, все поиски будут запущены, одновременно результат самого быстрого будет возвращен, как только он прибудет, остальные программы будут продолжать работать, пока их поиск закончен.
Что происходит с остальными? Остальные будут отброшены (будет выбран case <- done
, так как небуферизованный канал не может содержать никаких элементов, и больше никто не будет получать больше от канала).
Вы можете проверить это в этом примере Go Playground .