Немного предыстории.
Go был рожден из-за неудовлетворенности от существующих языков и сред системного программирования. Программирование стало слишком сложным, и нынешние языки в этом частично виноваты. Приходится выбирать между эффективной компиляцией, эффективным выполнением и легкостью программирования — все три качества недоступны в одном и том же мэйнстримовом языке. Программисты выбирали легкость программирования вместо безопасности и эффективности, переходя на динамически типизированные языки, такие как Python и JavaScript, вместо C++ или, в меньшей степени, Java.
Go — попытка соединить легкость программирования на интерпретируемом, динамически типизированном языке с эффективностью и безопасностью статически типизированного, компилируемого языка. Он так же стремится быть современным, поддерживая сетевые и многоядерные вычисления. Наконец, Go задумывался как быстрый язык: компиляция большого выполняемого файла должна занимать не более нескольких секунд. Чтобы реализовать эти цели, нужна выразительная, но легкая система типов, конкарентность и сборка мусора, твердая спецификация зависимостей и т.д. Эти вещи не могут быть хорошо реализованы в библиотеках, нужен был новый язык.
Какова цель проекта?
За последнее десятилетие не появилось ни одного значительного системного языка программирования, но за это время компьютерная сфера сильно изменилась. Несколько трендов:
- Компьютеры стали намного быстрее, а разработка ПО быстрей не стала.
- Управление зависимостями стало большой частью разработки программ, а традиционные Си-подобные "заголовочные файлы" несовместимы с чистым анализом зависимостей и быстрой компиляцией.
- Начинается бунт против громоздких языков вроде Java и C++, из-за чего люди переходят на динамически типизированные языки типа Python и JavaScript.
- Некоторые фундаментальные концепции, такие как сборка мусора и параллельное вычисление, плохо поддерживаются популярными системными языками программирования.
- Появление многоядерных компьютеров вызвало беспокойство и замешательство.
Корпорация Google считает, что стоит попробовать сделать новый язык, конкарентный, со сборкой мусора и быстрой компиляцией. Насчет пунктов выше:
- Большие программы Go компилирует за несколько секунда на одном компьютере (и это действительно так, 63 Мб исходного кода компилируются на домашнем компьютере ровно 7 секунд, причем одинаково компилируется как на Windows машине, так и на Linux и Mac).
- Go предоставляет такую модель создания программ, при которой избегаются издержки Си-подобных заголовочных файлов и библиотек, делая анализ зависимостей простым.
- Система типов Go не имеет иерархии, поэтому не тратится время на определение зависимостей между типами. Кроме того, хотя типизация в Go статическая, язык пытается сделать так, чтобы программисты не чувствовали их громоздкость, как в типичных объектно-ориентированных языках.
- Go имеет полноценную сборку мусора, а так же предоставляет фундаментальную поддержку конкарентного выполнения и коммуникаций.
- В язык заложен способ создания системного ПО для многоядерных компьютеров.
Насчёт простоты кода.
Абстрактный код в вакууме представляет собой реализацию протокола Qiwi для провайдера услуг. Читается вообще без каких либо проблем. После изучения Go буквально за 1-2 дня этот код написан за 2-3 часа после работы в пятницу(!).
Интересные материалы и видео
Go success stories from around the web
Введение в программирование на Go
HighLoad++ 2012. Язык программирования Go от Google
Интервью: Брайан Керниган и Алан Донован
Русскоязычные подкасты на iTunes
Видеозапись докладов конференции Golang Moscow (Digital October) (докладчики из компаний Яндекс, Openstat (Spylog), sports.ru)
Доклад Антона Поварова "Go в Badoo" на Golang Meetup
Сайт о языке программировани Go
Роб Пайк подверг критике C++ и Java
Centrifuge + Go = Centrifugo – harder, better, faster, stronger