Язык программирования Go

Краткая справка

Go - язык программирования, разработанный при поддержке компании Google. Работа над ним началась еще в 2007 году, поскольку сотрудников из Гугла во многом не устраивали существующие тогда языки (так и рождаются почти все языки программирования). Они жаловались на то, что им приходится выбирать между простотой разработки, эффективностью выполнения и компиляции. По этим причинам их не устраивали С++, Python, Java и другие существующие на тот момент языки. Тогда руководство Гугла решило пойти им навстречу и создать язык, который бы устроил даже самого требовательного программиста.

Проектированием языка занимались такие гении, как Роб Пайк (один из создателей кодировки для UTF-8 и операционных систем Inferno и Plan 9), Кен Томпсон (разработавший в соавторстве с Денисом Ритчи язык C) и Роберт Гризмер. Десятого ноября 2009 года выпустили релиз языка ...и почти сразу возник конфликт с автором языка Go! - Ф.Д.Маккейбом, который требовал переименовать язык, ссылаясь на то, что он использовал это название первым. Трудно поверить в то, что в Гугле не умеют гуглить, однако, с тех пор официально чаще используют название golang. Несмотря на то, что названия языков всё таки отличаются, конфликт между Гуглом и Маккейбом не разрешен до сих пор.

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

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

Философия языка Go

По утверждению авторов, они стремились максимально упростить язык и убрать из него все сложное и ненужное. Его можно считать попыткой заменить С,хотя на самом деле он находится где-то посередине между С и сценарными (скриптовыми) языками. В нем не слишком много встроенных функций (также, как и в С), однако он не предназначен для для низкоуровневого программирования. В нем есть элементы функционального программирования, сборщик мусора (автоматическое управления памятью) и многие другие элементы высокоуровневых языков, однако при этом некоторые вещи из ООП такие, как наследование реализации и использование утверждений) специально исключены или заменены на упрощенные аналоги.

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

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

Где применяется Go

На официальном сайте языка Go вы можете найти примеры программ, написанных на нем. Это утилиты для cloud computing (облачные вычисления), web-приложения и web-серверы, торрент-клиенты и даже несколько программ для рисования трехмерных сцен. А также множество ботов для Telegram и Slack.

В самом Google язык применяется для написания серверной части веб-приложений. Точно также его используют во многих крупных сервисах - Dropbox, Facebook, Docker, Mail.ru, Яндекс и.т.д. В итоге, можно сказать, что Go прочно занял нишу бэкенда web-сервисов. Конечно, на нем можно писать и движки для игр, но это уже будет нестандартным применением языка, для которого потребуется больше опыта, чем у Вас может быть в данный момент.

Сложность обучения Go

Go был создан для того, чтобы быть легким в обучении. Говорят, что для программиста на другом языке не будет проблемой выучить golang за пару выходных. Что же касается начинающих, то здесь структура Go также помогает освоиться быстрее. В нем нет громоздкого ООП, не нужно ручное управление памятью, нет ссылок-указателей и других сложностей, которые Вы могли бы встретить, если бы начали изучать, например, С++.

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

Плюсы/минусы Go

Перечислим плюсы языка:

  • простота синтаксиса;
  • скорость компиляции (намного выше, чем у скриптовых языков);
  • большое количество встроенных и сторонних библиотек (можно подключить библиотеки С и С++);
  • легкость в обучении;
  • замена ООП на более простые аналоги;
  • простота в организации многопоточных программ при помощи встроенных средств;
  • автоматическое управление памятью;
  • скорость разработки;
  • не использует виртуальную машину;
  • поддержка сообщества и Google;
  • большое количество вакансий;
  • прикольный талисман в виде суслика.

К минусам относят:

  • отсутствие дженериков(механизмы системы типизации). Создатели языка так и не смогли придумать простой и понятный аналог, поэтому на данным момент они не добавлены в Go;
  • непривычная для программистов, перешедших с других языков, обработка ошибок;
  • более слабая поддержка для windows, чем для Linux или Mac OS X.

Сопутствующие технологии

LiteIDE - среда разработки, ориентированная на Go. В других IDE (Eclipse, Visual Studio) поддерживается при помощи плагинов.

6g и Gccgo - основные компиляторы Go на текущий момент

SSA interpreter - интерпретатор, который позволяет запускать программы на golang.

Beego, Revel, Gin - фреймворки на Go, аналогичные Rails.