Go

Материал из Энциклопедия о программировании
Перейти к: навигация, поиск

Go (Го) — простой и элегантный компилируемый многопоточный язык программирования.

Во второй версии в язык добавили дженерики и прочее.

Язык выстрелил хорошо и применяют его, где нужна хорошая экономия на гигантских ресурсах.

Из доклада разработчиков из Badoo известно, что когда они переписали полностью бекенд на Go, их количество серверов сократилось с 30 с чем-то до 4, из которых 2 — резервные. Финансовая экономия просто гигантская.

У Go нет внешних зависимостей, все компилируется в единый бинарник и холодный старт очень быстрый, то есть деплой и перезапуск микросервисов вообще безболезненный. Но самая главная особенность языка это рантайм: Go рутины и каналы. Потому он и позиционируется как язык для архи-высоких нагруженных систем с гигантским количеством одновременных подключений где, языки на виртуальных машинах не вывезут, или обслуживание их будет слишком дорогим.

Go рантайм принимает решение сам, когда функцию нужно выносить в реальный поток, а когда нет. Таким образом, используется намного меньшее количество реальных потоков, а значит не тратится время на переключение контекста, особенно когда половина потоков чаще всего спят и ждут ответа. Каждая Go-рутина занимает 8 кб ОЗУ, в отличии от реального потока, где нужно тратить огромные ресурсы ОС по созданию потока, копированию памяти и т. д.

Go нужен там, где есть огромное число одновременных подключений и особенно хорош для микросервисной архитектуры, так как перезапуск очень дешевый и быстрый деплой, не нужны никакие докеры и виртуализация рантайма/окружения для запуска определенного софта. Есть просто бинарник с вкомпиленными зависимостями.

Так как язык синтаксически прост — компиляция дико быстрая.

Нишу Go свою уже занял. Это не промышленный комбайн, но отличный инструмент для изысканного кастома.