Эта статья является одной из серии статей, посвященных «Заметкам по изучению языка го от Ванголео». Официальный сайт:Ву Ву. VA NGO Leo.com/go/hello-go…
Я впервые столкнулся с языком Go в 2015 году, закончил Hello World и с тех пор следую этому новому языку. До сих пор язык Go разрабатывался более десяти лет и привлекал все больше и больше внимания разработчиков.Благодаря популярности облачных технологий, Интернета вещей и блокчейна Go кажется первым языком в 21 веке. Тяжеловесные проекты, такие как Docker, Kubernetes и Ethereum, разрабатываются на основе Go.
Язык Go – это язык программирования высокого уровня, исходный код которого был открыт компанией Google в 2009 году. Он предназначен для решения практических задач при разработке крупномасштабных систем. Он поддерживает параллелизм, унифицированные спецификации, отличается простотой и элегантностью и высокой производительностью. многие проповедники языка Go хвалят его как «язык C в эпоху облачных вычислений».
В последнее время я систематически изучаю язык Go и составил некоторые учебные заметки. Я поделюсь им с вами позже. Сегодня поговорим об истории развития языка Go и особенностях языка Go.
Именование Go
Это электронное письмо, отправленное Робом Пайком 25 сентября 2007 г. в 15:12 Роберту Гриземеру и Кену Томпсону по поводу обсуждения языка программирования, примерно следующего содержания:Я получил некоторое вдохновение, когда ехал домой:
- Назовите язык программирования «go», это коротко и легко написать.
- Классы инструментов можно назвать: goc, gol, goa.
- Интерактивный инструмент отладки также может быть напрямую назван «go».
- Языковые файлы имеют суффикс .go и так далее.
Как и многие великие компании, рожденные в гаражах, Go названа в честь автомобилей. Выше приведен источник названия языка Go. Мне лично очень нравится название Go.Это кажется случайной идеей, но очень точной. С чистой кровью Google, он также отражает простоту и элегантность языка. И ключевое слово для запуска сопрограммы в Go — go.
20% рабочего времени инженера Google
С тех пор три человека, Роберт, Роб и Кен, начали исследования и разработки в Google.До 2009 года Go был официально открытым исходным кодом.Команда проекта Go приняла 10 ноября 2009 года, то есть язык, официально открытый для разработчиков. внешний мир официальный день рождения. Исходный код изначально размещался по адресуhttp://code.google.com
, а затем в течение следующих нескольких лет постепенно мигрировали на GitHub.
Метод работы Google «20% времени» позволяет инженерам тратить 20% своего времени на работу над любимыми проектами. Голосовой сервис Google Now, новости Google, информация о дорожном движении на картах Google и т. д. — все это продукты 20% времени.
Язык Go также был продуктом в 20% случаев в начале.
Три основателя языка Go
В электронном письме упоминаются три наиболее важных основателя языка Go:
Давайте познакомимся с этими тремя большими парнями:- Роб Пайк: бывший член группы разработчиков Bell Labs Unix, главный руководитель разработки операционной системы Plan9 и главный руководитель разработки операционной системы Inferno.
- Кен Томпшн: лауреат премии Тьюринга, автор языка B, предшественника языка C, один из изобретателей Unix и главный автор операционной системы Plan 9. Совместная разработка UTF-8.
- Роберт: Разрабатывал код для движка Google V8 JavaScript и Chubby.
Go языковая родословная
Развитие языков программирования похоже на эволюцию видов. Каждый язык программирования берет лучшее от предыдущего языка, обновляя и улучшая его. На рисунке ниже показано, какие преимущества Go унаследовал от своих предшественников.Именно на плечах этих гигантов Go играет все более важную роль в облачную эпоху.
Особенности языка Go, унаследованные от его предшественников:- C: Go иногда называют «C-подобным языком» или «C для 21 века».Go наследует многие идеи языка C, такие как аналогичный синтаксис выражений, структура потока управления, базовый тип данных, передача параметра вызова по значению, указатель и т. д., а язык Си всегда был моднымЭффективность работы скомпилированного машинного кода и плавная адаптация к существующим операционным системам.
- Паскаль: Но есть другие предки в семейном дереве Go. Один из влиятельных ветвей прибыл с языка Паскаль, разработанный Никлаусом Вирт. Тогда язык Modula-2 вдохновленконцепция упаковки. Затем язык Oberon убрал различие между файлами интерфейса модуля и файлами реализации модуля. Язык Оберон-2) второго поколения непосредственно влияет на синтаксис импорта и объявления пакетов, а также на синтаксис объявления методов, обеспечиваемый объектно-ориентированными функциями языка Оберон).
- CSP: еще один предок языка Go, создавший язык Goразличать другие языкиВажная особенность , была вдохновлена малоизвестной базовой литературой по исследованиям параллелизма, опубликованной Тони Хоаром из Bell Labs в 1978 году, в которой сообщались последовательные процессы (сокращенно CSP). В CSP программа представляет собой набор процессов, работающих параллельно, без общего состояния между ними.трубопроводДля связи и синхронизации управления. Но CSP Тони Хоара — это просто язык описания для описания основных концепций параллелизма, а не язык программирования общего назначения, на котором можно писать исполняемые программы.Язык Go использует каналы для связи в процессе сопрограммы..
тяжеловесное приложение
Ниже приведены некоторые из тяжеловесных приложений языка Go:
Преимущества Го
Если этого требует реальный мир, я могу создать прототип, протестировать и развернуть производственную систему за несколько дней и обрабатывать в 5 раз больше запросов в секунду с очень небольшой нагрузкой на ЦП и память. Я думаю, что только язык Go может справиться с этой задачей.
Язык Go имеет следующие преимущества:
- Отдельный бинарный дистрибутив: компиляция проекта Go создает статический исполняемый файл. Этот файл можно запускать независимо от других зависимостей. Этот подход особенно подходит для облачных контейнерных сред.
- Кросс-компиляция: В любой операционной системе вы можете скомпилировать двоичные файлы, которые работают на других платформах. Например, система Mac может компилировать двоичные файлы, которые могут работать в Linux и Windows.
- Сборка мусора: язык Go поддерживает сборку мусора. Напротив, C++, Rust и т. д. требуют от разработчиков самоконтроля.
- Исполнение: Go очень быстрый. Производительность близка к C++. Гораздо выше, чем Java, Python, Node.
- Эффективность разработки: язык Go обладает как производительностью статического языка, так и эффективностью разработки динамического языка.
- Простота и эффективность: простота и эффективность являются частью дизайна Go Philosophy. Типичный контр-пример - это сложный, раздутый язык Java.
- Параллелизм: уровень языка поддерживает параллелизм, упрощает параллельную разработку с помощью сопрограмм и каналов и повышает производительность параллельной работы.
- Богатая стандартная библиотека. Стандартная библиотека Go охватывает текст, ввод-вывод, работу в сети, шифрование, веб-службы, удаленный RPC, механизмы шаблонов и многое другое.
- Можно вызывать язык C: функции языка C можно вызывать для дальнейшей оптимизации производительности и повторного использования огромной экосистемы языка C.
- Быстрое время компиляции: Go компилируется исключительно быстро. Вы можете обратиться к двум системам генерации статических блогов: Hexo (разработка Node) и Hugo (разработка Go).
- Инженерное дело: цель дизайна языка Go — стать инженерным языком и решать практические инженерные задачи. Язык Go определяет спецификации разработки и предоставляет богатые инструменты. Используя язык Go, вы можете писать программы, которые легко читать и понимать, а также легко тестировать, поддерживать и расширять.
Минусы
- Отсутствует тяжелый фреймворк. Например, Ruby's Rails, Python's Django, Java's Spring.
- Обработка ошибок: нет системы исключений. Чиновники Go работают над устранением этой проблемы.
- Управление пакетами: в Go долгое время не было официальной системы управления пакетами. До недавнего времени версия 1.13 Go официально представляла модули Go в качестве официального инструмента управления зависимостями.
- Не стандартная модель объектно-ориентированного программирования: это тоже новшество языка Go. Если вы убежденный сторонник ООП, это может быть немного неудобно.
культура
Люди говорят, что каждый раз, когда вы изучаете новый разговорный язык, вы также погружаетесь в какую-то культуру людей, говорящих на этом языке. Таким образом, чем больше языков вы изучаете, тем больше вариаций у вас может быть.
То же самое касается языков программирования. Независимо от того, как вы будете применять новый язык программирования в будущем, он всегда принесет вам новую перспективу программирования или какую-то особую технику.
Будь то функциональное программирование, сопоставление с образцом или наследование прототипов, как только вы их изучите, вы сможете взять эти идеи программирования с собой, что расширит набор инструментов для решения проблем, который у вас есть как у разработчика программного обеспечения. Они также меняют способ чтения высококачественного кода.
И в этом отношении у Go есть огромное преимущество. Основными столпами культуры Go являются сохранение простого, практичного кода без создания множества избыточных абстракций и уделение приоритетного внимания ремонтопригодности. Также частью культуры Go является то, что большая часть времени тратится на написание кода, а не на возню с инструментами и средами или выбор другой реализации.
Культуру го также можно охарактеризовать следующим образом:«Должен быть только один способ сделать что-то одно, и сделать его простым и эффективным».
Небольшое примечание. Go часто мешает вам, когда вам нужно создать относительно сложный абстрактный код. Ну, я бы сказал, что это легкий компромисс.
Эта статья написанаwww.vangoleo.comвыпускать