Родословная или Should I Go?
Размышляя о рождении языка, мне на ум всегда приходят таблицы Менделя. Да-да, те самые, которые о наследовании. Биологическом. И не мудрено, ибо все явления во вселенной так или иначе , покуда движется стрела времени, подчинены законам эволюции. Хотите рисунков? Их есть у меня.

На исходе века Взял и ниспроверг Злого человека Добрый человек. Из гранатомета Шлёп его, козла! Стало быть, добро-то Посильнее зла...
Как вы уже поняли, рассматриваемый нами язык Go оформился к 2009 году в недрах Корпорации Добра. Стараниями таких корифеев Google как Роб Пайк и Кен Томпсон. Да что там Google, оба персонажа - звёзды первой величины в мировой истории IT, приложившие руку к созданию C, Unix way, и прочих фундаментальных сущностей.
Судя по представленной выше родословной:
Язык Go изрядно обогатился наследием ортодоксального С (вплоть до прямой возможности вызова C кода). Явные C-like корни имеют функции ввода-вывода и их спецификаторы формата, именуемые в Go термином "verbs".
Также Go неплохо покормился на ниве SCP (Communicating Sequential Processes), что есть по сути не столько язык программирования, сколько алгебраический аппарат исчисления процессов, нашедший достаточно широкое применение в современной вычислительной науке в связи с большим распространением параллельных систем. К слову, в данном аспекте язык Gо на уровне парадигмы имеет сродство с Erlang.
И, наконец, отметим влияние ветки Паскаля и его производных. К худу это или к добру, автор судить не возьмётся.
Говоря в общем, Go разрабатывался как попытка замены языка С/С++ для решения реальных проблем, возникающих при разработке программного обеспечения в Google. Как "язык С XXI века", с непревзойдённой поддержкой кроссплатформенности, механизмом сборки мусора, встроенными простыми и ясными средствами распараллеливания процессов и создания коммуникационных каналов для общения и синхронизации между резидентными модулями.
А теперь предлагаю восхититься кроссплатформенными возможностями этого языка:
Go GOOS and GOARCH (bold values - работает "из коробки")
A list of valid GOOS values:
androiddarwindragonflyfreebsdlinuxnaclnetbsdopenbsdplan9solariswindowszos
A list of valid GOARCH values:
386amd64amd64p32armarmbearm64arm64beppc64ppc64lemipsmipslemips64mips64lemips64p32mips64p32leppcs390s390xsparcsparc64
A list of valid 32-bit GOARCH values:
386amd64p32armarmbemipsmipslemips64p32mips64p32leppcs390sparc
A list of valid 64-bit GOARCH values:
amd64arm64arm64beppc64ppc64lemips64mips64les390xsparc64
A list of GOOS/GOARCH supported by Go out of the box
darwin/386darwin/amd64dragonfly/amd64freebsd/386freebsd/amd64freebsd/armlinux/386linux/amd64linux/armlinux/arm64linux/ppc64linux/ppc64lelinux/mipslinux/mipslelinux/mips64linux/mips64lelinux/s390xnacl/386nacl/amd64p32nacl/armnetbsd/386netbsd/amd64netbsd/armopenbsd/386openbsd/amd64openbsd/armplan9/386plan9/amd64plan9/armsolaris/amd64windows/386windows/amd64
A list of 32-bit GOOS/GOARCH supported by go out of the box
go out of the boxdarwin/386freebsd/386freebsd/armlinux/386linux/armlinux/mipslinux/mipslenacl/386nacl/amd64p32nacl/armnetbsd/386netbsd/armopenbsd/386openbsd/armplan9/386plan9/armwindows/386
A list of 64-bit GOOS/GOARCH supported by go out of the box
go out of the boxdarwin/amd64dragonfly/amd64freebsd/amd64linux/amd64linux/arm64linux/ppc64linux/ppc64lelinux/mips64linux/mips64lelinux/s390xnetbsd/amd64openbsd/amd64plan9/amd64solaris/amd64windows/amd64
Впечатляет, неправда ли? Добавлю к этому, что зачастую для того, чтобы собрать проект под различные системы и архитектуры вовсе не требуется доработка кода, либо такая доработка может быть минимальной и реализовываться путём ограниченного использования операторов ветвления внутри кода проекта. Это же, с определёнными оговорками, касается и использования некоторых приёмов защиты бинарного кода, о чём мы, возможно, поговорим в своё время. Существуют также способы собрать приложение как нативную службу Windows.
Итак, если вы бэкэнд разработчик, и ваше стремление - с разрабатывать кроссплатформенные, легковесные, высоконагруженные и многопоточные приложения и делать это с лёгкостью - то Go ваш язык выбора. Возможности интегарции с C/C++ и Java не окажутся лишними. Единственной утратой, пожалуй, окажется затруднение работать с системными "сиплюсатыми" API, по крайней мере посредством стандартных пакетов.
YOU`RE WELCOME!
Last updated