Комментарии 11
Но отдельной реализации очереди в стандартной библиотеке нет.
Каналы (буферизированные) вполне себе очереди. Особенно когда речь идет о взаимодействии двух горутин.
Да. Но каналы имеют фиксированный размер. Если в очередь пишет и читает 1 goрутина, как в алгоритме обхода дерева в ширину, например, то появляется возможность deadlock'а. Так что простые очереди тоже нужны.
Из канала можно читать и без блокирования + еще можно легко реализовать таймаут через time.After().
Но согласен — использовать каналы в одной горутине — довольно бессмысленно и порой опасно.
Однако мой коммент был не про универсальность каналов для всех применений, он был о том, что не стоит так категорично заявлять что очередей нет. Такое вот прочитает новичок и начнет все эти навороты пользовать там где канала — за глаза и за уши хватает.
Но согласен — использовать каналы в одной горутине — довольно бессмысленно и порой опасно.
Однако мой коммент был не про универсальность каналов для всех применений, он был о том, что не стоит так категорично заявлять что очередей нет. Такое вот прочитает новичок и начнет все эти навороты пользовать там где канала — за глаза и за уши хватает.
Разработчики, знакомые с Java collections framework не могут смотреть на эти поделки в Go без слез…
Тут как на кухне: есть несколько ножей, каждый для своих задач.
Небольшим ножом для тонкой разделки овощей, большие куски говядины же порционно на стейки нарезать же не будешь? Не будешь.
Небольшим ножом для тонкой разделки овощей, большие куски говядины же порционно на стейки нарезать же не будешь? Не будешь.
НЛО прилетело и опубликовало эту надпись здесь
Справедливости ради, впервые collections framework появился в jdk 1.2 — конец 1998 года, когда джаве было почти три года. В красивом виде, с дженериками и concurrency-коллекциями — в J2SE 5.0, 2004 год (джаве — 8 лет). Go вышел в 2012 — ему 7 лет. Почему бы немного не посравнивать?
Неужели концепция языка изменится, и язык вместе со стандартной библиотекой станут дружелюбными к разработчику?
Довольно забавно сравнивать одну только стандартную библиотеку с++ с кучей разрозненных репозиториев на github. Давайте тогда ещё boost и abseil в сравнение включим
Большое спасибо за материал! Действительно полезно было найти такую статью в интернете, наткнулся в поисковике пока писал код на Go :)
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
Шпаргалка по структурам данных в Go