Міжнародна конференція розробників
і користувачів вільного програмного забезпечення

Язык программирования Go: использовать нельзя игнорировать.

Алексей Романов, Minsk, Belarus

LVEE 2014

This paper gives a short introduction into Go programming language. It is a statically-typed language with syntax loosely derived from that of C, adding garbage collection, type safety, some dynamic-typing capabilities, additional built-in types such as variable-length arrays and key-value maps, and a large standard library. Main advantages and disadvantegs of Go language are reviewed. Go would be extremely helpful for creating scalable and robust network services with great performance.

Go, часто именуемый так же как Golang – компилируемый, многопоточный язык программирования, разработанный компанией Google. Язык довольно молодой, разработка его началась в недрах компании Google в 2007 году, в 2009 он был анонсирован публике, а мартом 2011 датирована первая стабильная версия – r56. Язык активно развивается и в настоящее время, текущая стабильная версия языка – 1.3. Создателями языка являются небезызвестные товарищи Роб Пайк и Кен Томпсон, а также Роберт Гризмер.

Ключевыми особенностями языка Go являются:

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

Язык Go умеет распараллеливать написанную программу на все процессоры компьютера, на котором она запускается. Для этого используется механизм сопрограмм, которые называются горутины (go-routines). Сопрограммы – это легковесные потоки, и их количество может достигать десятков и сотен тысяч в одной программе. При этом Go относится довольно бережно относится к ресурсом компьютера и не потребляет много процессора и памяти без необходимости.

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

Если верить бенчмаркам, Go значительно превосходит в производительности популярные скриптовые языки Python, Ruby, PHP, примерно равен по производительности языку Java и немного отстаёт по этому показателю от C/C++. Потребление памяти у Go довольно скромное по сравнению с Java, Python, Ruby, но C/C++ он проигрывает в этом компоненте.

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

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

Синтаксис GO довольно простой, и изучить его можно за несколько дней. Статическая и строгая типизация не вызовет никаких проблему у программистов c опытом на C/C++/Java. При переходе на него со скриптовых языков Python/Ruby/Perl замечено, что скорость разработки довольно прилично падает, но при этом возрастает качество полученного на выходе кода.

Существуют 2 основных реализации языка Go: Go Compiler(gc) и проект gccgo. GC – это оригинальный компилятор, разработанный в недрах компании Google и выпущенный под BSD-лицензию с 3 пунктами. gccgo является частью коллекции компиляторов GCC и лицензирован под GPLv3.

Язык активно используют различные коммерческие компании для решения своих производственных задач, таким образом, его можно считать готовым к промышленному использованию. Наиболее известные компании, использующие Go для решения серьёзных инженерных задач – Google, Yandex, Dropbox, Github, Iron.io, Zynga.

К недостаткам Go можно отнести:

  • проблемы с написанием обобщенного кода(generics в Java, templates в C++);
  • проблемы со использование Go во встраиваемых системах(embedded systems);
  • язык довольно специализированный(например, написать приложение с GUI-интерфейсом будет не так просто);
  • язык довольно молодой(не так много библиотек, возможны проблемы с производительностью, поиском программистов под проект на этом языке).

Таким образом Go – это довольно молодой язык с открытым исходным кодом и большим растущим сообществом разработчиков. Основная специализация Go – написание высокопроизводительных сетевых сервисов, которые могут обрабатывать большое количество одновременных запросов. При этом Go эффективно использует основные ресурсы компьютера – процессор и память. Кроме этого, Go является языком общего назначения, позволяющим решать широкий круг различных производственных задач.

Пример кода на Go, запускающего 2 бесконечных сонных горутины:

func server(i int) {
   for {
      print(i)
      time.Sleep(10)
   }
}
go server(1)
go server(2)

Ссылки

https://www.openhub.net/p/go
https://code.google.com/p/go-wiki/wiki/GoUsers
http://benchmarksgame.alioth.debian.org/
http://golang.org/doc/devel/release.html
http://golang.org/doc/faq
http://yager.io/programming/go.html

Abstract licensed under Creative Commons Attribution-ShareAlike 3.0 license

Назад