Go - компилируемый, многопоточный язык. Данный язык программирования был разработан Google как часть проекта по разработке операционной системы Inferno. В настоящее время поддержка языка осуществляется только для операционных систем Linux, Mac OS X, в разработке находится порт под Windows (Уже в официальном репозитории).
Описание
Синтаксис Go очень похож на синтаксис С: блоки кода в фигурных скобках; общая структура управления выполнением программы включает for, switch и if. В отличие от C, точка с запятой в конце строки не является обязательным; декларация переменных происходит по-другому; преобразования типов строгое; новые инструкции go и select были введены для поддержки параллельного программирования. Новые встроенные типы включают хеш-таблицы, строки Unicode, slices-массивы, и каналы для передачи данных между потоками.
Go спроектирован для быстрого компилирования, даже на устаревшем оборудовании. Этот язык поддерживает уборку мусора. Четкая, параллельно-ориентированная структура Go (каналы альтернативны каналам ввода данных) одолжена с Tony Hoare 's CSP. В отличии от предыдущих параллельно-ориентированных языков программирования, таким как occam или Limbo, Go не предоставляет какой-либо встроенной поддержки предупреждений безопасности или проверки параллельности. На сегодняшний день Go не имеет никакой встроенной поддержки шаблонов, но это может быть добавлено в будущем.
Из функций, доступных в C + + или Java, Go не включает в себя подражание типов, обобщенное (шаблонное) программирование, утверждение (АССЕРТ), переопределения методов, арифметические операции над указателями. Авторы Go подчеркивают открытость шаблонному программированию, явно выступают против accept и арифметических операций над указателями, в то время склонны разрешить наследование типов для большего удобства языка. Первоначально язык не включал обработку исключений, но в марте 2010 был реализован механизм, который известен как panic / recover для обработки ошибок и исключений, для избежания проблем с исключениями, с которыми столкнулись авторы.
Видимость функций, за пределами файла, где они определены, определяется неявно по капитализации их идентификаторов, в отличие от C + +, где используется ключевое слово public.
Реализация
В настоящее время существует два компиляторя Go. Первый 6g/8g/5g (компиляция для AMD64, x86, и ARM соответственно) и подручные средства известны как 'gc', основанные на предыдущей работе Кена Томпсона над Plan 9's C toolchain. А также gccgo, фронтенд для GCC, написан на C + +.
Оба компилятора работают на Unix-подобных системах, порт для Microsoft Windows, для gc, были добавлены в основной пакет, большинство стандартных библиотек также уже работают под Windows.
Также существует 'tiny', среда выполнения, позволяющая программам на Go работать на голом железе .
Конфуз с именем
В день официального релиза Go, Francis McCabe, разработчик языка программирования Go!, попросил Google сменить название языка для предотвращения конфликта с именем его языка программирования. Несмотря на то, что McCabe не имеет торговой марки на название, некоторые из комментаторов призвали Google, в ответ на запрос McCabe, изменить название. Этот вопрос был закрыт 12 октября 2010 по статусу Unfortunate (неудачный), разработчик из Google прокомментировал закрытие так Существует много компьютерных продуктов и сервисов с наименованием Go. За 11 месяцев с нашего релиза, было минимальное количество случаев со спутыванием этих двух языков .
Параллельность
Go предоставляет goroutines, маленькие легкие потоки (нити). Goroutine создаются командой go с анонимных или обычных функций.
Goroutine выполняются в параллель между собой, включая функцию, которая их вызвала. Им нет необходимости запускаться в отдельных потоках, но их группы собираются в несколько потоков - передача управления между ними осуществляется блокировкой их при получении или передаче сообщений через каналы.
Популярность
Go вошел в TIOBE Programming Community Index на 15 место в свой первый год, сдвинув устоявшиеся языки, такие как Pascal. На 1 октября 2010, она занимает 20-ю строчку индекса.