Prg67.ru

Онлайн вебинары
0 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

Язык программирования go для чайников

Golang: основы для начинающих

Golang: основы для начинающих

  • Переводы , 24 августа 2017 в 21:49
  • Александр Наливайко

Golang, или Go — язык программирования, начало которого было положено в 2007 году сотрудниками компании Google: Робертом Гризмером, Робом Пайком и Кеном Томпсоном.

Go поддерживает типобезопасность, возможность динамического ввода данных, а также содержит богатую стандартную библиотеку функций и встроенные типы данных вроде массивов с динамическим размером и ассоциативных массивов.

С помощью механизмов многопоточности Go упрощает распределение вычислений и сетевого взаимодействия, а современные типы данных открывают программисту мир гибкого и модульного кода. Программа быстро компилируется, при этом есть сборщик мусора и поддерживается рефлексия.

Это быстрый, статически типизированный, компилируемый язык, при использовании которого создается впечатление использования динамически типизированного и интерпретируемого языка.

21 апреля в 16:00 в 16:00, онлайн, беcплатно

Размер программ на Go начинается с 3 строк и может достигать нескольких миллионов, записанных в один или несколько файлов с расширением .go . Современные текстовые редакторы, например, vim, поддерживают его синтаксис.

Настройка окружения

Для начала скачаем 64-битную версию Go c официального сайта. В зависимости от используемой операционной системы выполняем следующие действия.

UNIX / Linux / MacOS X / FreeBSD

Извлекаем скачанный архив в папку /usr/local/go . Например:

Добавляем папку /usr/local/go/bin в переменную окружения PATH :

Windows

Используем MSI файл и следуем инструкциям. По умолчанию инструменты Go размещаются в папке С:Go . При установке папка C :Gobin автоматически добавится в системную переменную PATH .

Чтобы изменения вступили в силу, перезапустим все открытые окна эмуляторов терминала.

Проверяем корректность установки, создав и выполнив файл C:ProjectsGotest.go :

Выполним этот код и получим следующий результат:

Синтаксис

Пакеты

Каждая программа на языке Go состоит из пакетов (packages). Пакет main — главный, с него начинается выполнение программы. В приведённом выше примере импортируется пакет fmt .

Импорт

Импорт пакетов можно описать двумя способами.

Функции

Общая форма определения функции выглядит следующим образом:

Количество и тип входных аргументов может быть любым. Для примера опишем функцию add с двумя входными параметрами формата int :

Выполним этот код и получим следующий результат:

Переменные

Определение переменной в Go означает передачу компилятору информации о типе данных, а так же о месте и объёме хранилища, которое создаётся для этой переменной. Определять переменные одного типа можно по одному и списком. Общая форма такая:

С помощью оператора var определяем перечень переменных, причём тип данных указываем в конце выражения.

Объявление возможно как на уровне пакета, так и на уровне функции. Рассмотрим пример:

Выполним этот код и получим следующий результат:

Оператор цикла

В языке Go один оператор цикла — это for , который повторяет список инструкций заданное количество раз. Цикл состоит из трёх выражений:

  1. Инициализация. Выполняется перед первой итерацией.
  2. Условие. Вычисляется перед каждой итерацией.
  3. Инкремент. Выполняется после каждой итерации.

Общая форма цикла выглядит так:

При инициализации кратко объявляются переменные, которые доступны только в пределах цикла.

Цикл останавливает свою работу, когда условие принимает значение false .

Примечание В отличие от таких языков, как C, Java и JavaScript, перечисленные выражения цикла не выделяются скобками. В данном случае обязательны лишь фигурные скобки, обрамляющие тело цикла.

Рассмотрим пример программы:

Выполним этот код и получим следующий результат:

Условный оператор

Форма определения условного оператора в Go выглядит следующим образом:

Если выражение в поле условия истинно, код, размещённый между фигурными скобками, выполнится.

Условие описывается значением, переменной или выражением. Например:

  • true — выполняется всегда;
  • a — выполняется, когда a меньше 10 ;
  • (a — выполняется, когда a меньше b или a меньше c ;
  • (a — выполняется, когда a меньше b и a меньше c .

Рассмотрим пример программы:

Выполним этот код и получим следующий результат:

Массивы

Go также поддерживает массивы, которые представляют из себя структуру данных фиксированного размера, состоящую из элементов одного типа. Массивы используются для хранения наборов данных, но полезно подразумевать под ними коллекцию переменных одного типа.

Чтобы объявить массив, необходимо указать тип и требуемое количество элементов следующим образом:

Например, чтобы создать массив balance , состоящий из десяти элементов типа float32 , используем следующее выражение:

Если значения элементов известны, для определения массива допустимо использовать следующую конструкцию:

Длина массива не изменяется, потому что является частью типа данных. Это кажется ограниченным решением, но не волнуйтесь: в Go реализована комфортная работа с массивами.

Рассмотрим пример программы:

Выполним этот код и получим следующий результат:

Срезы

Срезы (Slices) в Go — абстракция над массивами. Хотя встроенных способов увеличить размер массива динамически или сделать вложенный массив в Go нет, срезы убирают это ограничение. Они предоставляют полезные функции и широко используются программистами.

Объявить срез можно как массив, но без указания размера или с помощью функции make :

Размер массива фиксирован, а у среза изменяемый. По сути, срез — более общий вид массива.

Тип []T — срез с элементами типа T .

a[0:5] — срез 5 элементов массива a .

Рассмотрим пример программы:

Выполним этот код и получим следующий результат:

Структуры

Структура (structure) — пользовательский тип данных, который кроме прочего комбинирует элементы разных типов. Чтобы объявить структуру, используем выражения type и struct .

Struct определяет тип данных, которому соответствует два и более элементов.

Type связывает заданное имя с описанием структуры.

Форма описания выглядит следующим образом:

Как только структура типа определена, он может использоваться при объявлении новых переменных:

Чтобы получить доступ к элементам структуры, используем оператор доступа к элементу. Рассмотрим на примере:

Выполним этот код и получим следующий результат:

Почему именно Golang?

Концепция языка Golang разработана на основе опыта решения повседневных задач и не преследует цель сделать прорыв в программировании. Кроме того, Go не реализует ряд функций, которые делают другие языки (C++, Java и Python) настолько мощными. Но есть три причины, чтобы задуматься об использовании этого языка.

Читабельность

Как только привык к синтаксису Go, прочесть чужой код — тривиальная задача.

У каждого человека собственный «правильный» способ делать вещи, поэтому Go навязывает свой стиль программирования. В результате вопросы вроде использования или неиспользования фигурных скобок отпадают, и остаётся только писать код по заданным правилам.

Скорость

За короткий промежуток времени можно написать быструю программу.

Производительность работы пакета на Go, возможно, будет меньше, чем при использовании С, зато скорость компиляции для больших программ будет выше. Для большинства проектов — приемлемый компромисс, причём при необходимости достаточно просто переписать код на языке Go.

Меньше ошибок

Большинство ошибок возникают в непроверенном или сложном коде.

Go предоставляет удобные средства для тестирования. Кроме того, строгая типизация устраняет ошибки вроде случайного сравнения количества яблок с количеством груш, которые определяются ещё на этапе компиляции.

Заключение

Если хотите погрузиться глубже в изучение, посмотрите нашу подборку бесплатных книг по знакомству с Go, а главное — начните создавать маленькие программы, чтобы на практике понять тонкости языка. Удачи!

Go — простой язык для серьезных задач

Если вы не знаете, какой язык программирования выучить в 2016 году — попробуйте освоить Go. Основное преимущество языка в эффективности разработки, так что его можно применять в серьезных проектах. При этом он прост в изучении: если вы уже программируете на Python или C++, то научитесь писать годный код на нем буквально за несколько дней.

«Ровно год назад в пятницу я получил offer от Lazada (без знания Go), и в понедельник, после собеседования, HR’ы подписали мне его на должность Senior’a» — Иван Кищенко, Lazada Tech Hub.

Для человека, знающего ООП и С++, изучение языка Go не проблема.

Начать

Пройдите тур по Go — удобный и понятный экскурс в язык для новичков. Тур интерактивный: на сайте можно написать, скомпилировать и запустить код на удаленном сервере. Много информации о Go можно узнать из подкаста GolangShow.

Читать

Статьи

Массу ценной информации вы найдете в официальном блоге языка и FAQ. Особое внимание уделите статьям:

Прочтение «Go Concurrency Patterns: Pipelines and cancellation» полезно всем для понимания механики работы каналов.

Книги

«Network programming with Go» — о сети и том, как с ней работают в Go.

«The Ultimate Guide to Building Database-Driven Apps with Go» поможет разобраться с базой данных и кастомными типами. В книге всего 44 страницы, после ее прочтения вы будете знать, как правильно использовать базы данных SQL в Go.

Примеры кода

Помогут ресурсы Go by Example и Golang Examples. Вообще с читабельностью кода все просто замечательно, много интересных идей есть на github.com.

Разработка

Eclipse (plugin в вялотекущей поддержке), Sublime — просто редактор, Intelij Idea имеет отличный плагин с поддержкой delve (один из наиболее интересных debuger’ов на сегодняшний день).

Сообщества программистов на G+ — российское и официальное.

Что думаете о Go? Используете в проектах? Пишите в комментариях.

А тем, кто только встал на путь разработки, мы рекомендуем профессию «Веб-разработчик».

Если вы не знаете, какой язык программирования выучить в 2016 году — попробуйте освоить Go. Основное преимущество языка в эффективности разработки, так что его можно применять в серьезных проектах. При этом он прост в изучении: если вы уже программируете на Python или C++, то научитесь писать годный код на нем буквально за несколько дней.

«Ровно год назад в пятницу я получил offer от Lazada (без знания Go), и в понедельник, после собеседования, HR’ы подписали мне его на должность Senior’a» — Иван Кищенко, Lazada Tech Hub.

Для человека, знающего ООП и С++, изучение языка Go не проблема.

Начать

Пройдите тур по Go — удобный и понятный экскурс в язык для новичков. Тур интерактивный: на сайте можно написать, скомпилировать и запустить код на удаленном сервере. Много информации о Go можно узнать из подкаста GolangShow.

Читать

Статьи

Массу ценной информации вы найдете в официальном блоге языка и FAQ. Особое внимание уделите статьям:

Прочтение «Go Concurrency Patterns: Pipelines and cancellation» полезно всем для понимания механики работы каналов.

Книги

«Network programming with Go» — о сети и том, как с ней работают в Go.

«The Ultimate Guide to Building Database-Driven Apps with Go» поможет разобраться с базой данных и кастомными типами. В книге всего 44 страницы, после ее прочтения вы будете знать, как правильно использовать базы данных SQL в Go.

Примеры кода

Помогут ресурсы Go by Example и Golang Examples. Вообще с читабельностью кода все просто замечательно, много интересных идей есть на github.com.

Разработка

Eclipse (plugin в вялотекущей поддержке), Sublime — просто редактор, Intelij Idea имеет отличный плагин с поддержкой delve (один из наиболее интересных debuger’ов на сегодняшний день).

Сообщества программистов на G+ — российское и официальное.

Что думаете о Go? Используете в проектах? Пишите в комментариях.

А тем, кто только встал на путь разработки, мы рекомендуем профессию «Веб-разработчик».

Обучение Golang с Нуля: ТОП-20 Лучших Курсов для Начинающих [2020]

Привет, дружище! На связи Шаполов Алексей. В этой статье ты найдёшь только самые лучшие курсы Golang для начинающих с нуля . ☟

Готов начать обучение Golang-разработке? Тогда полетели! 🚀

А ты знал, что Go-программисты зарабатывают в среднем более 50 000 рублей в месяц?

ТОП-20 платных и бесплатных курсов по Golang

№1. Golang-разработчик с нуля

Кто проводит курс: онлайн-университет «Нетология».

Сколько длится: 6 месяцев.

Что ты узнаешь и чему научишься из курса:

  • Разрабатывать приложения на основе микросервисов
  • Использовать HTML, CSS и JavaScript
  • Работать с фронтенд-технологиями, чтобы создавать красивую оболочку для приложений.
  • Работать с базами данных

— Освоишь кроссбраузерную вёрстку и тестирование вёрстки

— Научишься работать с DevTools

— Узнаешь, что такое семантическая разметка страницы и вёрстка текста

— Познакомишься с вёрсткой элементов, доступных для Screen Readers

— Освоишь вёрстку элементов, доступных для управления с клавиатуры

— Научишься оформлять код

Стоимость: 89 900 53 940 рублей.

Твои навыки после прохождения курса:

  • Вёрстка под тач и мобильные устройства
  • Создание интерактивных веб-страниц
  • Работа с JavaScript
  • Использование выражений в JavaScript
  • Навыки использования библиотеки React, JSX, React router, VirtualDom
  • Работа с языком Go
  • Работа с файлами и сетью, HTTP 1.1, HTTP 2
  • Docker & Docker Compose: управление сервисами и упаковка приложений
  • Нереляционные базы данных — MongoDB
  • Микросервисная архитектура
  • Kubernetes

Отзывы:

Нюансы и особенности:

  • Домашние задания с проверкой
  • Общение с наставником
  • Во время курса, кроме Golang, ты также освоишь — HTML, CSS и React
  • Сделаешь сразу 3 проекта для портфолио — онлайн-игру, калькулятор ипотеки, корпоративную социальную сеть
  • Получишь диплом о профессиональной переподготовке установленного образца
  • За 6 месяцев пройдёшь путь от юного падавана до junior-разработчика

№2. Факультет Go-разработки

Кто проводит курс: онлайн-университет GeekBrains совместно с Mail.ru Group.

Сколько длится: 18 месяцев.

12 книг для изучения языка программирования Go

Golang или Go — относительно новый язык, который ориентирован на многопоточность. Его в 2009 году запустил концерн Google. На Западе он уже обрёл свою популярность и занял нишу среди других языков, но до нас толком не дошёл, — пишет KV.BY. Лишь сейчас начинаются попытки освоения этого языка. Это видно даже по скудности выбора литературы для изучения. Из-за этого большая часть представленных учебников будет только на английском языке.

Программирование на языке Go

Перед языком Golang ставилась цель максимально использовать заложенную мощность в многоядерные процессоры. Марк Саммерфильд продемонстрирует вам возможности языка, идиомы и способы написания программ. В книге собрана вся информация, нужная для создания функциональных и работающих приложений. Автор показывает преимущества Go перед другими языками, указывая на ключевые особенности. Марк в этой книге продемонстрирует вам тонкости параллельного программирования, применение динамической типизации и прочие плюшки.

Книга подойдёт и новичкам и тем, кто уже имеет некоторое представление о Go.

Go на практике

Расчёт идёт на опытных программистов, использующих этот язык. Книга — свод рецептов по решению типовых вопросов, возникающих при создании приложения или программы. Пособие построено по принципу «вопрос-решение-обсуждение». Книга показывает концепцию языка Go, демонстрирует приемы, тестирование и отладка, маршрутизацию и прочие возможности. Также затронут вопрос о создании облачных приложений.

Язык программирования Go

Книга универсальная и подойдёт как новичкам, так и уже имеющим какие-то знания по языку. Хотя, проще в ней будет ориентироваться более опытным программистам. Книга поможет также освоить язык, если вы до этого работали с другими. Здесь описаны его плюсы, зачем вообще создавался Go, узнаете, как писать эффективно и идиоматично.

Авторы — профессионалы в двух областях: программировании и написании учебного материала. Тут приведены примеры решения практических вопросов, приемы, облегчающие написание кода и т.д.

Go in action

Пособие рассчитано на тех, кто владеет основами языка Go. Go in action проведет вас от начинающего программиста к маэстро, виртуозно управляющим кодом Golang. Авторы с первых страниц погружают вас в особенности и концепции языка, а затем постепенно подводят к получению опыта практическим путем.

Задания, предлагаемые книгой, – это веб-ресурсы, серверы и приложения. В процессе программирования вам поведают о методах манипулирования, преобразования данных и прочих фишках.

Introducing Go

Миниатюрная книжка в 62 страницы. Казалось бы, что можно понять из такого маленького объема? Но, если у вас есть опыт работы с другими языками, то это пособие быстро проведет вас по азам Go и поможет вам определиться, нужен ли вам он или лучше поискать что-то иное. А вторым доводом в пользу книги идет тот факт, что она от O’Really.

Книга пошагово знакомит с языком, в конце каждой главы есть задания для усвоения материала. Главы короткие, лаконичные, но понятные и простые. Все идет по принципу цепочки. Так что перескочить с одного на другое не получится, да и малый объем не позволит это сделать.

Get Programming with Go

Книга для новичков. Она поможет освоить азы языка Go за 32 урока. Пособие разбито на 7 модулей, которые познакомят с языком. Последний блок уроков откроет дверь в параллельное программирование на Go.

Учебник обучит вас синтаксису языка, даст множество заданий для самостоятельной работы. Все задания можно выполнять в тестовой среде.

Go Programming by Example

Обучение программированию происходит на примерах кода реально работающих приложений и ресурсов. Удобно, ведь сразу запоминается синтаксис, манера кодить и сами особенности языка. Рассматриваемых тем в книге масса, и вот некоторые из них: среда разработки, массивы, функции, указатели, структуры, методы, программирование сокетов, баз данных и много других.

The Go Bestiary

Это не учебник, а, скорее, сборник советов и рекомендаций, собранных воедино. Здесь вы найдете способы структурировать свои проекты, увидите распространенные и нежелательные ошибки. Это учебное пособие рассчитано на более опытных программистов, но и тем, кто работал с другими языками, будет полезна изложенная здесь информация.

Learning Go Programming

Это пошаговое практическое руководство, которое поможет вам быстро начать работу с Go. Начнете с изучения основ языка Go, затем продолжите знакомиться с детальным описанием типов данных Go. После этого вы узнаете, как использовать идиомы параллелизма, чтобы избежать подводных камней и создавать программы, которые точно соответствуют ожидаемому поведению. Наконец, вы сможете использовать некоторые из наиболее важных функций GO, такие как сетевое программирование и интеграция с ОС, для создания эффективных приложений. Все концепции объясняются в четкой и сжатой форме.

Network Programming with Go

А вот книга для матерых программистов на Go. Вам предстоит погрузиться в важные аспекты сетевой архитектуры и Go, такие как сериализация данных, протоколы уровня приложений. Кроме основ, сетевое программирование охватывает ключевые вопросы по HTTP и HTTPS, шаблонам, удаленным вызовам процедур (RPC) и т.д.

Кроме того, автор Ян Ньюмарч поможет вам в создании и подключении к полноценному веб-серверу на основе Go. Эта книга может служить как важным учебным пособием, так и справочным материалом по сетям Go.

Mastering Concurrency in Go

Учебник расскажет вам о параллелизме, о том, как Go использует ее, о возможностях и структурах ядра параллелизма Go. На каждом этапе в книге будут представлены реальные, полезные фрагменты кода с подробным описанием используемых методов. К концу вы будете чувствовать себя уверенно, создавая безопасное, согласованное с данными, высокопроизводительную параллельную программу.

Цель этой книги — показать, как можно использовать Go для создания высокопроизводительных, надежных параллельных программ с уникальной формой многопоточности, в которой применяются процедуры, связывающиеся и синхронизирующиеся по каналам.

Mastering Go Web Services

Этот учебник познакомит вас с главными моментами проектирования, создания и развертывания веб-службы с применением идиоматических методов REST с акцентом на быструю, безопасную и гибкую работу. Первым делом вы создадите свой API с пакетом HTTP. Вы будете смотреть на создание и сборку вашего приложения, включая популярные структуры дизайна. Вы также увидите способы развертывания кода для подготовки и разработки. Наконец, вы увидите, как функции безопасности в Go могут использоваться для защиты от внедрения SQL-кода и компрометации конфиденциальных данных.

К концу этой книги вы достигнете высокого уровня мастерства в создании и развертывании веб-сервисов и веб-API с помощью Go.

Программирование на Go для начинающих

Многие из нас привыкли считать, что действительно универсальных языков не бывает. Если нам нужна эффективность, мы используем «Си» и одновременно с этим миримся с его ограничениями. Когда нам требуется повышенная скорость разработки, мы «дружим» с таким языком, как «Питон», ожидая получить медленный код. Erlang даёт нам возможность делать высокораспараллеленные распределённые приложения, однако его иногда бывает трудно вписать в существующие проекты.

Полностью ломает вышеописанную систему мышления, принятую на разных языках, именно Go. Он сочетает в себе преимущества множества языков, освобождая разработчиков от ряда их недостатков.

Язык Go — это «Си» на стероидах?

Когда 10 лет тому назад Кена Томпсона, который активно участвовал в создании языка «Си», спросили, а каковым бы он сделал данный язык на тот момент, разработчик ответил, что он стал бы похож на Limbo. После этого прошло достаточно много времени, и Томпсон вместе с Робом Пайком (другой автора языка C) приняли участие в создании Go, ставшего в каком-то смысле переосмыслением и результатом развития Limbo. Таким образом, как только Go представили миру, он сразу стал бестселлером. И произошло это 10 ноября 2009 года.

Во многом успеху способствовали имена авторов, известных в качестве создателей операционной системы UNIX, кодировки UTF-8, языка «Си». Сыграло свою роль и покровительство Google, так как именно в лабораториях этой корпорации родился на свет Go.

Можно сказать, что старт был отличный. Однако одно это не позволило бы языку длительно держаться на плаву, если бы программистам не было предложено нечто действительно новое — нечто, упрощающее и жизнь, и разработку. И именно это «что-то» присутствовало в языке Go, имелось в большом количестве и сделало его в некоторых аспектах незаменимым.

«Си» сегодняшнего дня

Разработчики Go позиционируют его как системный язык, который сочетает в себе скорость исполнения и эффективность кода, написанного на C, с простотой разработки, присущей более высокоуровневым скриптовым языкам, включая языки, имеющие встроенные средства параллельного программирования. При этом если говорить о внешних признаках, то здесь Go напоминает нам некую странную солянку, состоящую из синтаксисов C, Pascal и ADA. В совокупности с приведенным выше описанием создаётся сильное ощущение некого подвоха (так бывает, если видишь новость о супер-мега-разработке группы студентов из Урюпинска). Но скепсис достаточно быстро исчезает, когда ты начинаешь изучать Go и понимаешь, почему он стал именно такой, какой есть сейчас.

В основе Go находятся 3 фундаментальных принципа: 1. Гарантируется высокая скорость как компиляции, так и производительности приложений. 2. Обеспечивается простота разработки и технической поддержки приложений на уровне, присущем высокоуровневым скриптовым языкам. 3. Встроены средства параллельной разработки, которые позволяют использовать все ядра современных процессоров, которые имеются в железе.

Хотите знать, что всё это значит в реальности? Что же, давайте разберёмся по каждому пункту в отдельности.

Производительность

Даже простейшая референсная реализация компилятора с языка Go может всего за доли секунды сгенерировать удивительно быстрый код, причём скорость его исполнения будет сопоставима со скоростью работы кода, написанного на «Си» или C++. Однако здесь следует добавить, что в отличие от своих именитых предков компилятор Go обеспечивает проверку типов, а результирующий код получает собственный механизм распараллеливания и встроенный сборщик мусора.

С самых первых минут язык создавался так, чтобы быть максимально простым и понятным как человеку, так и машине. И многие архитектурные и синтаксические компоненты Go задумывались с оглядкой на то, чтобы сохранялась возможность их простого разбора программным обеспечением, будь то дебаггер, компилятор либо даже среда разработки.

В итоге язык получился достаточно прямолинейным, то есть не допускающим спорных мест и неочевидностей, которые могут затруднить работу компилятора (яркий пример неочевидного синтаксиса и сложной общей механики — тот же C++, который порой заставляет компилятор в буквальном смысле буксовать на месте, а головы разработчиков трещать от перенапряжения).

Множество других элементов языка, которые не имеют прямого отношения к синтаксису, тоже были заранее оптимизированы. Например, язык не содержит механизма неявного приведения типов, а это оберегает программиста от ошибок, позволяя сделать проще компилятор. Также в языке отсутствует полноценная реализация классов с их полиморфизмом и наследованием. Что касается механизма параллельной разработки, то он задействует собственную реализацию потоков внутри любой программы — это делает потоки настолько лёгкими, что можно сказать, что их создание обходится почти даром. Весьма проворен и встроенный сборщик мусора — в языке попросту нет элементов, способных усложнить его работу. А в стандартную поставку Go включены плагины для любых популярных средств программирования, включая Vim.

Простота в разработке и сопровождении

Несмотря на то, что Go — системный язык, это не мешает ему быть довольно высокоуровневым, что необходимо для обеспечения программиста всем необходимым для быстрого и комфортного написания кода. Язык содержит ряд высокоуровневых конструкций, например, ассоциативные массивы и строки (их можно копировать, сравнивать, делать срезы, вычислять длину). Имеет он и средства для создания своих типов данных (подобны классам в других языках), плюс средства для создания потоков и обмена данными между ними. И, разумеется, он лишён указателей, которые способны ссылаться на любой участок памяти — в результате срыв стека в приложении, написанном на Go, в принципе невозможен.

Однако основное, что даёт Go разработчику, есть та самая очевидность синтаксиса и прямолинейность, о которой мы уже упоминали. В этом смысле Go напоминает такие языки, как Modula, Pascal и Oberon. И почти любой синтаксический элемент языка соответствует общей логике, поэтому может явно и безошибочно интерпретироваться вне зависимости от положения в коде. Например, вы просто не сможете сделать известную ошибку объявления переменных, которая описана во всех гайдах по стилю оформления кода на «Си»:

В общем Go создан разработчиками для разработчиков. И проявляется данное обстоятельство во всём, начиная с обрамления блоков кода по аналогии со стилем «Си», неявного объявления типов, отсутствия необходимости проставлять точку с запятой после каждого выражения и заканчивая отсутствием механизма исключений и полноценных классов (создавались они, разумеется, для упрощения жизни, однако на практике часто становятся причиной запутывания кода).

И главная идея языка заключается в том, чтобы быть инструментом, позволяющим писать программы, а не постоянно думать о том, а будут ли они вообще работать (эта черта, как известно, присуща для таких языков, как «Си» и С++).

Средства параллельного программирования

Это одна из самых сильных черт Go. Пожалуй, среди языков общего назначения «голангу» просто нет равных (кроме, разве что, Limbo, однако он привязан к операционной системе Inferno).

Выигрыш тут состоит не только в том, что средства встроены. Намного большее значение имеет факт, что эти средства реализуют простую и эффективную модель, которая полностью соответствует CSP — теории взаимодействующих последовательных процессов. Те, кто знаком с Occam и Limbo, хорошо понимают все плюсы CSP, а кто не знаком, сейчас поясним. Смотрите, вместо того, чтобы нагромождать потоки, мьютексы, блокировки и прочие системы синхронизации, делающие параллельное программирование настоящей мукой и приводящие и переизданию многостраничных томов о том, как правильно писать многопоточные приложения, у нас существует CSP. Его автор, Тони Хоар, предлагает элегантное и довольно простое решение: позволить приложению в любое время создать новую нить, которая будет иметь возможность общаться с родителями и прочими нитями посредством отправки синхронных сообщений.

Если говорить о Go, то в данном случае эта идея выглядит следующим образом: 1. Создаётся переменная-канал. 2. Определяется функция, принимающая переменную-канал в виде аргумента и в своём теле содержащая код, который выполняется в отдельной нити. В конце эта функция отправляет результат выполнения в канал, что делается благодаря специальному оператору. 3. Функция запускается в отдельном потоке посредством ключевого слова «go». 4. Выполняется чтение из канала.

То есть происходит ответвление функции от основного потока исполнения, который в то же самое время переходит к ожиданию данных в канале. Результат исполнения поступает в канал, где основной поток его получает. Звучит довольно просто, но давайте посмотрим, как это выглядит в коде.

Пример

Один из наиболее популярных примеров, который хорошо демонстрирует мощь Go, — реализация таймера. Он выполняется в отдельном потоке и подаёт сигналы основному потоку через некоторые определённые промежутки времени, в течение которых переходит в спящий режим. Если писать код данной программы на любом из классических языков программирования, он выглядел бы довольно запутанным и громоздким. Однако в Go он выглядит просто и красиво:

Если бы мы выбрали простейшую реализацию данной программы, то она заняла бы и вовсе 15 строк. Но наш код намеренно усложнён путём добавления условных выражений и вывода на терминал. Они необходимы для понимания общего синтаксиса языка Go, а также механизма работы планировщика потоков.

Читать еще:  Язык программирования go самоучитель
Ссылка на основную публикацию
Adblock
detector