Почему Go?

Почему Go?

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

Долгое время основными языками для нашей команды бэкенда были PHP и немного Java. Оба достаточно старые и известные языки программирования, поддерживающие многие современные парадигмы программирования: ООП, потоки, наследование и прочие. Больше 5 лет назад наша команда, еще задолго до начала работы над проектом AppMaster начала рассматривать альтернативные языки программирования для создания серверных приложений. В качестве основных критериев мы ставили возможность работы практически на любой платформе, достаточная защита конечного приложения от реверс инжинеринга, производительность решения и конечно же сложность разработки и поддержки.

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

1. Относительная простота языка. Мы привыкли, что у каждого языка программирования совершенно разных порог входа и часто он коррелирует с мощностью и гибкостью языка. Отличный пример - C++, который имеет высокий порог входа, затратен с точки зрения поддержки решения и не прощает ошибок разработчика. Взамен C++ дает скорость выполнения, минимальное потребление ресурсов и возможность работать с системными функциями. На фоне него Go смотрится как более современная альтернатива - немного меньше гибкости и производительности, однако значительный выигрыш в быстроте входа и поддержке растущего решения.
Go не перегружен функциями и операторами, не имеет сложной системы ООП. Благодаря простоте конструкций языка, мы можем достаточно легко генерировать код используя общие паттерны программирования и немного AI для оптимизации больших участков кода. Процедурный подход помогает держать код сгенерированных приложений небольшим и читаемым, а отсутствие наследования не усложняет.

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

3. Масштабируемость. Приложения, написанные на Go отлично масштабируются. Go отлично поддерживает многопоточность с помощью механизма Goroutines и каналов для передачи данных между потоками. Goroutine потребляет не более 2Кб оперативной памяти, что делает многопоточность хорошо расширяемой и не ресурсозатратной. Goroutines асинхронны и ими достаточно просто управлять.

4. Расширяемость. За последнее время было написано огромное количество библиотек для Go, практически любой сервис по умолчанию создает SDK и для Go. Конечно, если сравнивать количество библиотек по сравнению с C/C++ или JS оно ничтожно мало, но достаточно быстро растет. В части подключения у Go есть свое секретное оружие: подключение C-библиотек с помощью Cgo и это в корне меняет подход к расширяемости приложений. Большинство серверных проектов теперь проще написать на Go, а самую ресурсозатратную часть вынести в отдельную скомпилированную библиотеку на C и подключить к проекту.

5. Поддержка платформ. Поддержкой кроссплатформенности в наше время не удивить, ведь многие языки программирования поддерживают несколько платформ одновременно. Какие-то поддерживаются нативно, какие то через специальные виртуальные машины типа JVM. Но Go и тут ушел вперед: приложение можно скомпилировать для Windows, Linux, macOS, FreeBSD, NetBSD, Solaris и еще кучу разных операционных систем, о существовании которых я кажется даже не слышал. Плюс поддержка архитектур процессоров от i386, amd64 и arm до riscv, ppc, mips и sparc. Сложно представить более широкий набор платформ, которые бы поддерживались популярным языком программирования в виде нативных сборок без использования виртуальных машин.

6. Популярность. Согласно статистике Github, Go занимает третье место среди всех языков программирования на платформе по количеству звезд после Javascript и Python. Количество разработчиков непрерывно растет, повышается количество разработчиков. Согласно отчету The State of Developer Ecosystem 2021 от JetBrains, Go является языком #1 на который собираются мигрировать проекты разработчики (11% опрошенных). Благодаря изначальной поддержки Google, сообщество языка Go очень быстро растет и в его экосистему добавляются новые компоненты от IDE, но специализированных утилит.

Вместо заключения.
Мой ответ кому-то покажется предвзятым в пользу выбранного языка программирования, но с точки зрения нашей платформы AppMaster.io это идеально попадание. Каждый день тысячи пользователей генерируют множество приложений используя наши алгоритмы генерации. Именно благодаря языку Go, нам удалось довести скорость генерации до совершенно непостижимых 22к строк кода в секунду, а весь процесс от старта генерации до завершения компиляции и деплоя до 22 секунд в среднем. Планируем ли мы добавлять другие языки для генерации серверных приложений в будущем? Конечно, ведь мы храним все требования к будущим приложениям без привязки к конкретному языку программирования (да, мы чистый no-code), но пока нет никаких конкретных ETA.

Go это отличный современный язык программирования который позволил нам создать платформу AppMaster.io. Мы очень благодарны авторам и коммьюнити языка за поддержку и развитие.Мы вносим свою лепту в развитие сообщества и предоставляем платформу для non-profit организаций, для социально значимых проектов и для поддержки open-source комьюнити - все полностью бесплатно.

22
Начать дискуссию