Где можно использовать горутины в Go?
Самый простой пример - это HTTP сервер.
Когда к вам приходит HTTP запрос - создаётся горутина и каждый запрос спокойно обрабатывается, никто никого не ждёт. Т.е. сервер может обрабатывать параллельно несколько запросов как раз за счёт горутин. 

Фактически, почти во всех сетевых сервисах есть смысл использовать горутины для распараллеливания обработки запросов (кроме epoll, kqueue и т.п.)

Еще хороший пример.
Вам нужно сделать парсер Авито :)) или индесатор сайтов.
Т.е. задача сводится к тому, что нужно будет постоянно качать страницы с сайтов.
Если вы будете качать одну страницу за другой - вы будете очень долго качать.
А так вы можете сделать пул из нескольких горутин (как минимум по 1 на поток процессора) и получите параллельное скачивание страниц.

Для ускорения работы вычислений (параллельные вычисления) есть смысл использовать горутины только по 1 на поток процессора). Т.е. в случаях, когда у вас огромный объём данных и нужно максимально ускорить его обработку. Например у вас файл 100Гб, и 8 ядер в процессоре - вы можете разбить файл на 8 частей и параллельно эти части обработать (в самом простом варианте, в реальной жизни нужно будет просто по частям считывать новые данные и скармливать свободной горутине)

Еще когда нужно сделать чтобы какая нибудь задача выполнялась в "фоне".
Например периодическая очистка кеша/устаревший записей в базе.

Реальных примеров намного больше :)
В целом их есть смысл использовать там, где нужно параллельное выполнение какой либо задачи или разных задач параллельно :)
В основном для asyncIO, асинхронного ввода/вывода.