Оглавление
ВведениеИстория происхожденияМаскотGo или Golang?Цели разработкиЧто есть в Go?Чего нет в Go?Где используется Go сейчас?
Go — Как все началось
29.01.2026

Введение
В ноябре 2025 года язык программирования Go отпраздновал свой шестнадцатый день рождения. Хотя Go прошел долгий путь с момента своего появления, по сравнению с другими языками он все еще считается новичком во многих кругах. В этой статье мы попробуем оглянуться назад и вспомнить, как начался путь Go, а также кратко рассмотрим его цели и некоторые особенности. Позже мы более подробно изучим Go в следующих статьях.
История происхождения
История Go началась во второй половине 2007 года в Google. Трое сотрудников Google — Роберт Гриземер, Роб Пайк и Кен Томпсон — пытались решить некоторые инженерные задачи, с которыми они столкнулись. Google, ввиду масштабов своей деятельности, сталкивается с инженерными задачами, отличными от задач многих других организаций. Критерии выбора языка программирования, которые использовали эти трое, основывались на трех основных соображениях: эффективная компиляция, эффективное выполнение и простота программирования.
Несмотря на то, что они оценили многие существующие языки, они не смогли найти ни одного, который бы отвечал всем трем их основным требованиям. Это понимание привело их к мысли о создании нового языка программирования. Так было заложено начало разработке Go.
Разработка началась в сентябре 2007 года. По мере продвижения работы к проекту присоединились многие другие. В январе 2008 года началась работа над первоначальным компилятором. В ноябре 2009 года язык был открыт для общего доступа. Потребовалось еще несколько лет, чтобы выпустить первую стабильную версию Go в марте 2012 года. Так началась история Go, которая продолжается и по сей день.
Маскот
Может ли язык программирования существовать без талисмана в наши дни? Это было бы немного скучно, не так ли? Не волнуйтесь, об этом тоже позаботились. У Go тоже есть талисман, который называется Gopher. Интересно, что первоначальная версия талисмана была создана Рене Френч задолго до появления Go. Позже талисман был адаптирован для проекта Go. Более подробную информацию об эволюции Go Gopher можно найти здесь. Это интересное чтение само по себе.

Знакомьтесь, Гофер!
Go или Golang?
Возможно, вы слышали, что Go также называют Golang. Чтобы прояснить ситуацию, официальное название языка — Go (а не Golang). Вы можете задаться вопросом: если это так, почему его иногда называют Golang? Дело в том, что когда пришло время регистрировать доменное имя для Go, создатели столкнулись с трудностями при получении доменных имен, содержащих только go. В результате был выбран домен golang.org, что привело к тому, что многие люди также стали называть язык Golang.
Цели разработки
Когда Go находился в стадии разработки, его дизайнеры ставили перед собой несколько целей. Эти цели были определены на основе того, чего они хотели достичь, а также на основе уроков, извлеченных из недостатков других языков, которые они оценивали.
Простота
В первую очередь, целью было создание простого языка с чистым и лаконичным синтаксисом. Одним из способов достижения этой цели было сведение количества ключевых слов к минимуму. Для уменьшения сложности требовалась легкая система типов без иерархии типов. Неявное преобразование было намеренно исключено. Считалось, что строгое разделение интерфейса и реализации позволит сохранить большую простоту. Ещё одним предпочтением стала композиция вместо наследования.
Масштаб
Одной из основных задач была поддержка крупномасштабного программирования. Она включала два аспекта:
Масштабируемость системы: более широкая поддержка параллелизма была обязательным требованием, а также требовался эффективный механизм коммуникации на уровне процессов и высокая скорость компиляции.
Инженерный масштаб: цель состояла в разработке языка для больших кодовых баз, которые пишутся и поддерживаются большими командами.
Поддержка современного оборудования
Многие из доступных в то время языков — C/C++, Java, Python и т. д. — были разработаны до появления современного оборудования. (Под современным оборудованием в данном контексте подразумеваются многоядерные процессоры, сетевое оборудование и распределенные системы). Go был специально разработан для использования преимуществ современного оборудования.
Эффективность кода
Когда дело дошло до написания кода, одним из желательных аспектов была простота программирования, аналогичная динамическим языкам, таким как JavaScript или Python. Но когда дело дошло до эффективности, предпочтение было отдано чему-то, похожему на статически типизированные компилируемые языки, такие как C, C++ или Java.
Безопасность
Типовая безопасность: никому не нравится, когда в производственной среде во время выполнения возникают проблемы с типами. Поэтому типовая безопасность была важна.
Безопасность памяти: Никто не любит проблемы с памятью. Поэтому возможность безопасного управления памятью также имела большое значение.
Время выполнения
Целью было создание среды выполнения с эффективной сборкой мусора без задержек. Кроме того, хотелось иметь встроенные строки, карты и каналы связи для внутрипотоковой коммуникации.
Улучшенная модель пакета
Хорошая модель пакетов в значительной степени способствует поддержанию кодовой базы в рабочем состоянии. Явное объявление зависимостей было целью, которая также помогла бы сократить время сборки.
Что есть в Go?
Вышеупомянутые цели проектирования заложили основу для функций Go. Чего они достигли после того, как приступили к созданию языка?
В целом, им удалось создать язык, который прост для людей и эффективен для машин. Давайте рассмотрим это подробнее.
Человеческий аспект
Язык имеет простой и лаконичный синтаксис, состоящий всего из 25 ключевых слов. Меньшее количество ключевых слов означает меньшую сложность при выполнении. Основной синтаксис в основном соответствует семейству C, с некоторым влиянием Pascal, Modula и Oberon в отношении деклараций и пакетов. Подход со статически связанными бинарными файлами еще больше снижает сложность при выполнении.
Встроенные конструкции параллелизма позволяют программистам проще писать многопоточные приложения. Go использует другой подход, называемый горутины, который представляет собой легкие потоки для многопоточности. Коммуникация и синхронизация между горутинами осуществляется с помощью типизированного потокобезопасного механизма, называемого каналами; встроенная поддержка общих карт, массивов и слайсов также улучшает опыт программирования.
Машинный аспект
Программы на языке Go компилируются в машинный код. Это значительно повышает производительность, поскольку не используется промежуточный уровень, такой как виртуальная машина. Благодаря тому, что язык поддерживает сборку мусора, программисты не должны беспокоиться об управлении памятью. Механизмы обеспечения безопасности памяти, такие как ссылки nil, проверка границ во время выполнения и инициализация переменных по умолчанию, помогают во время выполнения. Для реализации композиции используются интерфейсы.
Итог
Результатом этих выборов стал статически типизированный и компилируемый язык, подобный C++ или Java (без виртуальной машины), который во многих отношениях кажется таким же легким и динамичным, как JavaScript или Python.
Чего нет в Go?
Означает ли это, что в Go есть все? Конечно, нет. Разработчики сделали некоторый выбор относительно того, что не включать в него.
Go не имеет подклассов и не поддерживает наследование. Он использует необычный подход к объектно-ориентированному программированию, позволяя использовать методы для любого типа, а не только для классов. Это делается без какой-либо формы наследования на основе типов.
Нет конструкторов и деструкторов. Нет структур управления, связанных с обработкой ошибок, аналогичных парадигме try-catch-finally. Нет арифметики указателей, аннотаций и неявных числовых преобразований.
Почему некоторые возможности отсутствуют?
В обычных сценариях большинство языков стремятся добавить как можно больше функций. Но в случае с Go, как вы можете видеть выше, многие функции были исключены. Это было сознательным решением. Для этого есть много причин.
Ясность
Одним из основных факторов является то, что ясность считалась критически важной характеристикой. При чтении кода должно быть ясно, что будет делать программа. При написании кода должно быть ясно, как заставить программу делать то, что вы хотите. Иногда это означает, что нужно писать немного более подробно, вместо того чтобы вызывать непонятную функцию.
Делайте больше с меньшими затратами
Больше функций не всегда означает лучший язык. В случае Go меньше значит больше.
Где используется Go сейчас?
Как Go сейчас представлен в отрасли? Более 75% проектов в CNCF (Cloud Native Computing Foundation) написаны на Go. TIOBE дважды объявлял Go языком программирования года: в 2009 и 2016 годах. Хотя Go изначально был разработан как «системный» язык, сейчас он стал "универсальным" языком.
Кто использует Go
При выборе языка для вашего продукта одним из аспектов, который следует учитывать, является его распространенность в отрасли. В случае с Go, он прошел долгий путь с момента своего появления и достиг хорошего уровня распространения в отрасли.
Спасибо, что дочитали до конца. До следующей встречи, удачного программирования!

