Golang

Go является компилируемым языком программирования со статической типизацией. Команда разработчиков дизайна и SDK состоит из специалистов с многолетним опытом в сфере программирования.

У Go есть много характерных черт. Некоторые уникальны, прочие заимствованы из других языков программирования:

Форум Гоферов

Мы работаем над форумом для программистов на Golang. Очень нужны модераторы которые хотят помочь с ответами для новичков и помочь в развитии Go-сообщества.

Go на Форум

Уроки, статьи и Видео

Мы публикуем в паблике ВК и Telegram качественные обучающие материалы для быстрого изучения Go. Подпишитесь на нас в ВК и в Telegram. Поддержите сообщество Go программистов.

Go в ВК Go в Telegram

  • встроенная поддержка параллельного программирования;
    • горутины (зеленые потоки) и легкий старт новых горутин;
    • каналы (на основе модели CSP) и выборочные механизмы синхронизации между горутинами.
  • типы контейнера map и slice являются объектами первого класса;
  • полиморфизм через интерфейсы;
  • value boxing and reflection through interfaces;
  • указатели;
  • замыкание функции;
  • методы;
  • отложенные вызовы функций;
  • включение типа;
  • исключение типа;
  • сохранение памяти;
  • автоматический сбор мусора;
  • отличная кроссплатформенная совместимость.

Кроме того, не лишним будет отметить следующие аспекты языка:

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

Программистов Go часто называют сусликами (англ. gophers). Этот зверек также является логотипом данного языка программирования. Далее в статье мы будем использовать английский вариант термина — гофер.

Хотя Go является компилируемым языком со статической типизацией, в нем также есть довольно много функций, присущих динамическим скриптовым языкам. Затея объединить эти два типа языков может показаться сомнительной, но у Go все получилось довольно неплохо. Иными словами, Go владеет как строгостью статических языков, так и гибкостью динамических языков. Нельзя сказать, что процесс работы обходиться без компромиссов, но преимущество такой комбинации восполняет минусы сполна.

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

Компиляторы в Golang

В настоящее время самый популярный компилятор Go написан на Go и поддерживается командой разработчиков Go. Позже он будет упоминаться, как стандартный компилятор Go, или gc (англ. Go compiler). Не путайте с другим GC — garbage collection, или сборка мусора. Команда разработчиков Go поддерживает еще один компилятор Go — gccgo. В настоящее время его использование менее популярно, чем gc. Тем не менее, оба компилятора находятся в активной разработке. На данный момент команда Go занимается улучшением gc.

gc поставляется с официальным Go SDK. Go SDK 1.0 был выпущен в марте 2012 года. Версия Go совместима с версией Go SDK. Это две основные версии языка, выпущенные с разницей в год.

После релиза Go 1.0, синтаксис Go немного изменился, было много улучшений для инструментов в Go SDK, особенно для gc. Например, заметные лаги, вызванные сборкой мусора, являются распространенной проблемой для языков с автоматическим управлением памятью. Однако, начиная с Go 1.8, улучшения, внесенные с реализацией параллельной сборки мусора в gc, по большей части устранили проблему задержки.

gc поддерживает кроссплатформенную компиляцию. К примеру, мы можем создать исполняемый файл Windows на ОС Linux и наоборот.

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

Преимущества исполняемых файлов Go:

  • небольшой объем памяти;
  • быстрое выполнение кода;
  • короткая продолжительность подготовки.

Некоторые другие компилируемые языки, такие как C/C++/Rust также обладают данными преимуществами, в каких-то аспектах выигрывают в сравнению с Go. Однако у Go перед ними есть свои плюсы:

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

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

Конечно, Go вовсе не идеален. В дизайне Go есть определенные минусы. Особенно это заметно с текущей версией Go 1. К примеру, Go не поддерживает произвольные неизменяемые значения. Это приводит к тому, что многие значения, не предназначенные для изменения в стандартных пакетах, объявляются как переменные. Это потенциально слабое место в безопасности программ Go. Go также не поддерживает дженерики для пользовательских типов и функций. Авторы Go не против введения пользовательских дженериков в Go. Они все еще в процессе поиска оптимального решения, что может сделать Go максимально понятным и простым.