golang язык программирования обучение
Лекции Техносферы: Программирование на Go
Продолжаем публикацию наших образовательных материалов. Этот курс посвящен изучению основ языка Go. На примере простой текстовой игры будут рассмотрены все основные задачи, с которыми сталкивается разработчик современных веб-приложений в крупных проектах, с реализацией их на Go. Курс не ставит задачи научить программированию с нуля, для обучения будут необходимы базовые навыки программирования.
Вы получите опыт разработки высоконагруженных бекенд приложений на Go, а также научитесь поддерживать, тестировать и отлаживать приложения. Из курса вы узнаете о том, как поднять веб-сервер, обрабатывать HTTP-запросы и работать с SQL-базой; что такое горутины c каналами и как выглядит асинхронное программирование на Go; какие основные вещи требует экcплуатация при принятии проекта в production.
Курс ведут Василий Романов, технический менеджер Почты Mail.Ru, Илья Ожерельев, программист backend’a Почты Mail.Ru, и Дмитрий Дорофеев, программист frontend’a Почты Mail.Ru.
Лекция 1. Введение
Вводная лекция, в которой описывается история языка, его основные особенности, использование Go в Mail.ru, основные синтаксические конструкции языка и базовые типы данных.
Лекция 2. Функции, структуры, интерфейсы. Объектная модель
На второй лекции рассматриваются следующие вопросы:
Лекция 3. Асинхронная модель
На третьей лекции рассматриваются параллелизм и многопоточность языка, Go-рутины (горутины), каналы, пакеты sync и atomic.
Лекция 4. Web. Работа с сетью
Из этой лекции вы узнаете о работе Go с сетью: работа с протоколом TCP, какие есть ограничения, особенности работы с URL, как строятся HTTP-запросы и ответы, и многое другое.
Лекция 5. Работа с СУБД
На пятой лекции рассказывается о клиентской (браузерной) части при работе с СУБД, а также о серверной части: построении бизнес-логики, создании сессии авторизации, профиля и работе с контентом.
Лекция 6. Система тестирования
Лекция посвящена построению системы тестирования для проверки кода на Go, вклбючая модульные тесты и выполнение непрерывной интеграции.
Лекция 7. Reflect or generate?
На лекции рассматриваются такие вопросы, как что такое рефлексия, законы рефлексии, использование go generate и так далее.
Лекция 8. Производительность
Как выявить медленно работающие части кода на Go и как их оптимизировать так, чтобы программа работала быстро в условиях ограниченности доступных ресурсов? Об этом вы узнаете из восьмой лекции.
Лекция 9. Context, unsafe, cgo
Заключительная лекция курса посвящена рассмотрению трёх тем: контекста (состояние запроса, отмена выполнения), unsafe (низкоуровневое программирование) и cgo (интеграция кодов на Go и С).
Плейлист всех лекций находится по ссылке. Напомним, что актуальные лекции и мастер-классы о программировании от наших IT-специалистов в проектах Технопарк, Техносфера и Технотрек по-прежнему публикуются на канале Технострим.
14 бесплатных онлайн-курсов по Golang
Для начинающих с нуля. До уровня PRO. 💪
1. «Golang для начинающих» от itProger
Длительность: 9 уроков.
Формат обучения: видеоуроки + текстовые материалы + практические задания.
Программа обучения
Что узнаете и чему научитесь
Плюсы и минусы курса
Кто проводит
ItProger — онлайн-школа программирования и сообщество программистов, которое существует уже более четырёх лет. У школы есть свои группы в соцсетях, где специалисты из сферы IT обмениваются новостями в индустрии и обсуждают тонкости своей работы.
2. «Разработка веб-сервисов на Go — основы языка» от МФТИ совместно с Mail.ru Group
Длительность: 4 недели.
Сертификат: выдаётся (платно).
Формат обучения: видеоуроки + текстовые материалы + тесты.
Программа обучения
Чему вы научитесь
Плюсы и минусы курса
О преподавателе
Лекции ведёт Романов Василий Вячеславович — технический директор Mail.ru On-Premise Solutions, преподаватель, читающий курсы в ведущих технических вузах страны: МГУ, МГТУ им. Баумана и НИЯУ МИФИ.
Более 7 лет занимается разработкой.
3. «Разработка веб-сервисов на Golang. Часть 2» от МФТИ совместно с Mail.ru Group
Длительность: 4 недели.
Сертификат: выдаётся (платно).
Формат обучения: видеоуроки + текстовые материалы + тесты.
Программа обучения
О чём курс
Курс является продолжением «Разработки веб-сервис на Golang — основы языка» от того же преподавателя, поэтому сначала рекомендуется ознакомиться с материалами первой части. В этой программе будут подробно рассмотрены типовые задачи, которые возникают перед программистом во время разработки веб-сервиса и способы их решения с использованием языка Go.
Плюсы и минусы курса
О преподавателе
Лекции ведёт Романов Василий Вячеславович — технический директор Mail.ru On-Premise Solutions, преподаватель, читающий курсы в ведущих технических вузах страны: МГУ, МГТУ им. Баумана и НИЯУ МИФИ.
Более 7 лет занимается разработкой.
4. «Программирование на Golang» от Stepik
Объём: 30 уроков, 63 теста, 86 интерактивных задач.
Формат обучения: текстовые уроки + тесты + интерактивные задачи + общение в закрытом чате в Telegram.
Программа обучения
Чему вы научитесь
Курс рассчитан на всех заинтересованных в языке Golang и затрагивает самые основы программирования на этом языке. В программе много практики, поэтому вы научитесь применять полученные знания и решать задачи, с которыми сталкиваются профессиональные программисты в процессе работы.
Плюсы и минусы курса
О преподавателях
Курс подготовлен молодыми студентами из разных технических университетов стран СНГ. Ребята занимаются разработкой не первый год и даже успели поработать с крупными компаниями — это очередное доказательство того, что программирование становится всё актуальнее с каждым годом.
5. «Изучаем Go программирование на Golang Learn Go» от Be Geek
Объём: 21 урок.
Формат обучения: видеоуроки.
Программа обучения
Чему вы научитесь
Курс предполагает изучение базовых основ языка программирования, затрагивает дальнейший поиск работы на фрилансе. В программе также есть несколько способов практического применения кода в личной жизни или в коммерческих целях.
Плюсы и минусы курса
6. «Программирование на Go» от «Технострим Mail.Ru Group»
Объём: 9 уроков = 16-18 часов на освоение материала.
Формат обучения: видеоуроки.
Программа обучения
Чему вы научитесь
В курсе обзорно освещаются самые основы программирования на языке Golang в простой и развлекательной форме текстовой игры. За девять уроков вы познакомитесь со всеми основными задачами, которые встают перед программистами в крупных IT-проектах и методами их решения с помощью языка Go.
Плюсы и минусы курса
Об авторах
«Технострим» — это образовательный канал для программистов от компании Mail.Ru Group. Все видео выходят на платформе YouTube и уже давно заслужили доверие специалистов.
7. «Курс по изучению Golang для начинающих» от Golangs.org
Объём: 35 уроков.
Формат обучения: текстовые уроки.
Программа обучения
Чему вы научитесь
Курс стоит рассматривать скорее как прикладной учебник — его нельзя просто прочитать и всё понять. Это удобный текстовый справочник со всей необходимой теорией, которую, тем не менее, нужно научиться применять на практике.
Плюсы и минусы курса
8. «Golang» от ITVDN
Объём: 8 уроков.
Формат обучения: видеоуроки.
Программа обучения
Чему вы научитесь
Плюсы и минусы курса
Об авторах
ITVDN — онлайн-ресурс, миссия которого — обучение всех желающих онлайн-профессиям, связанным с программированием. Создатели курсов помогают не только освоить конкретные навыки, но и выбрать специальность, которая придётся вам по душе.
9. «Уроки Golang» от AJ Golang Learn
Объём: 18 уроков.
Формат: видеоуроки.
Программа обучения
Чему вы научитесь
Курс охватывает самые основы разработки на языке Golang и будет понятен даже новичкам в программировании — небольшие уроки, в которых автор объясняет термины простым языком, станет хорошим подспорьем для тех, кто совсем недавно заинтересовался сферой IT.
Плюсы и минусы курса
10. «Погружение в Google Go» от Романа Левищенко
Объём: 25 уроков.
Формат: видеоуроки.
Программа обучения
Чему вы научитесь
В курсе простым языком объясняются основы программирования, затрагиваются важные нюансы, предоставлены исходники и материалы для самостоятельного обучения.
Плюсы и минусы курса
11. «Научись программировать на Go» от Булата Замалутдинова
Объём: 10 уроков.
Формат: видеоуроки на платформе YouTube.
Программа обучения
Чему вы научитесь
Несмотря на то, что курс небольшой, у него достаточно интересная и обширная программа. В видеоуроках предоставлена теория программирования на языке Golang и даны понятные пояснения.
Плюсы и минусы курса
12. «Golang Tutorials» от Tech With Tim
Длительность курса: 22 урока.
Формат обучения: видеоуроки.
Обратная связь: нет.
Программа обучения:
13. «Go Language Programming Practical Basics Tutorial» от Sentdex
Длительность курса: 24 урока.
Формат обучения: видеоуроки.
Обратная связь: нет.
Что освоите:
Кто проводит курс
Харрисон Кинсли
14. «Go Language Training» от ProgrammingKnowledge
Длительность курса: 30 уроков.
Формат обучения: видеоуроки.
Обратная связь: нет.
Что узнаете и чему научитесь:
🏃 Самоучитель для начинающих: как освоить Go с нуля за 30 минут?
Установка Go
Нажимаем на Download Go.
Выбираем версию для своей операционной системы и скачиваем.
Чтоб убедиться в успешной установке введите команду go version в консоли или терминале:
Установка редактора кода
Go поддерживается в различных редакторах кода (IDE), к примеру:
Создание проекта
Далее создадим файл main.go и запишем в него следующий код:
Компиляция и запуск программы
Чтобы запустить код, откройте консоль или терминал. Далее перейдите в каталог, где расположен файл main.go и выполните команду:
Результат работы программы будет следующим:
Вы написали первую программу на Go, поздравляем!
Давайте разберем, что здесь происходит:
Переменные
Переменные в Go характеризуются названием и типом, они должны объявляться до первого использования.
Объявление переменной в Go:
Базовые типы данных:
Если начальное значение переменной известно во время объявления, можно воспользоваться краткой записью:
Чтобы записать значение в переменную после ее объявления, воспользуйтесь оператором = :
Над переменными можно производить операции с помощью операторов. Например, числа можно сравнить, а строки конкатенировать.
Список операторов Go:
Управляющие конструкции
Для управления тем, какие строки кода исполнятся и в каком порядке, существуют специальные конструкции. Давайте перечислим основные:
Следование
Весь код исполняется последовательно, строка за строкой.
Условие
Для исполнения участка кода в зависимости от условия используется условная конструкция if :
Чтобы определить код, который выполнится при невыполнении ни одного условия можно добавить else :
Циклы
Этот цикл распечатает значения от 1 до 10.
Если нужен цикл без счетчика, нужно опустить первую и третью части цикла for вместе с точкой запятой:
На каждом повторении цикла будет проверяться заданное условие. Пока условие истинно, цикл будет продолжаться. Как только условие станет ложным, он прервется.
Для бесконечного цикла можно опустить условие:
Чтобы остановить цикл, используется ключевое слово break :
При достижении конструкции break цикл будет завершен.
Массивы
Обращение к элементам массива производится по имени массива и индексу элемента. Элементы массива индексируются с нуля.
Заполнение массива значениями:
Если начальное значение массива известно при объявлении, можно воспользоваться литералом объявления массива:
Для избежания лишнего кода воспользуемся кратким объявлением:
Размер массива статичен и не может меняться во время выполнения программы. Для этих целей используются слайсы.
Слайсы
Слайс является более удобной альтернативой массиву. Объявление слайса отличается от объявления массива только отсутствием размера:
Слайс может менять размер во время выполнения программы. Для добавления новых элементов в слайс используется встроенная функция append :
Функции
Для переиспользования часто используемого кода нужны функции.
Функция должна быть объявлена вне функции main :
После ключевого слова func указывается название функции. Далее в круглых скобках аргументы, которые принимает функция. После закрывающей круглой скобки указывается одно или несколько возвращаемых значений функции, а затем следует код функции в операторных скобках.
Функция Sum складывает два числа и возвращает результат:
Функция SumAndDivide возвращает как сумму, так и частное чисел:
Обе функции доступны в функции main:
Пакеты
Импорт и использование пакета strings :
Первое серверное приложение “Hello Web”
В пакете http содержится все необходимое для создания веб-сервера.
Поздравляем, вы написали ваш первый веб-сервер на Go!
Литература
Онлайн ресурсы
Go в “Библиотеке Программиста”
Мы пробежались по основам Go: переменные, операторы, управляющие конструкции, функции.
Ценностями языка являются:
Go современный, широко используемый и востребуемый язык программирования, который стоит начать изучать прямо сейчас.
Go используется в Google, Netflix, Facebook, Paypal, Microsoft и во многих других компаниях. Этот язык доступен каждому, но научиться создавать на нем профессиональные, безопасные и масштабируемые сервисы можно только перенимая знания опытных специалистов. Обратите внимание на современный курс «Разработка на Go» образовательной онлайн-платформы GeekBrains, который подойдет новичкам и действующим программистам на других языках. Эксперты из ведущих российских компаний поделятся со слушателями опытом разработки реальных систем на Go. В процессе обучения вы сделаете 5 проектов для портфолио, а после завершения курса получите удостоверение о повышение квалификации и помощь в трудоустройстве.
Язык Go для начинающих
Цель этой статьи — рассказать о языке программирования Go (Golang) тем разработчикам, которые смотрят в сторону этого языка, но еще не решились взяться за его изучение. Рассказ будет вестись на примере реального приложения, которое представляет из себя RESTful API веб-сервис.
Передо мной стояла задача разработать бэкэнд к мобильному сервису. Суть сервиса довольно проста. Мобильное приложение, которое показывает посты пользователей, находящихся рядом с текущим местоположением. На посты пользователи могут оставлять свои комментарии, которые тоже, в свою очередь, можно комментировать. Получается своеобразный гео-форум.
Давно хотел попробовать применить язык Go для сколь нибудь серьезных проектов. Выбор был очевиден, благо что этот язык как нельзя лучше подходит для подобных задач.
Основные преимущества языка Go:
Все эти, и многие другие особенности позволяют выделить язык среди остальных. Это достойный кандидат на изучение, к тому же, освоить язык довольно просто.
Итак, вернемся к нашей задаче. Хоть язык и не накладывает ограничений на структуру проекта, данное приложение я решил организовать по модели MVC. Правда View реализовывается на стороне клиента. В моем случае это был AngularJS, в перспективе — нативное мобильное приложение. Здесь я расскажу лишь об API на стороне сервиса.
Структура проекта получилась следующая:
Программа в Go разделяется на пакеты (package), что указывается в начале каждого файла. Имя пакета должно соответствовать директории в которой находятся файлы, входящие в пакет. Так же, должен быть главный пакет main с функцией main(). Он у меня находится в корневом файле приложения loctalk.go. Таким образом, у меня получилось 5 пакетов: conf, controllers, models, utils, main.
Буду приводить неполное содержание файлов, а только минимально необходимое для понимания.
Пакет conf содержит константы и настройки сайта.
Думаю, комментировать тут нечего. Функция init() вызывается в каждом пакете до вызова main(). Их может быть несколько в разных файлах.
В самом верху определяется имя пакета. Далее идет список импортируемых пакетов. Мы будем использовать пакет Martini. Он добавляет легкую прослойку для быстрого и удобного создания веб-приложений. Обратите внимание как импортируется этот пакет. Нужно указать путь к репозиторию откуда он был взят. А чтобы его получить, достаточно в консоли набрать команду go get github.com/go-martini/martini
Далее мы создаем экземпляр Martini, настраиваем и запускаем его. Обратите внимание на знак « := ». Это сокращенный синтаксис, он означает: создать переменную соответствующего типа и инициализировать ее. Например, написав a := «hello», мы создадим переменную a типа string и присвоим ей строку «hello».
Переменная m в нашем случае имеет тип *ClassicMartini, именно это возвращает martini.Classic(). * означает указатель, т. е. передается не само значение, а лишь указатель на него. В метод m.Use() мы передаем функцию-обработчик. Этот Middleware позволяет Martini делать определенные действия над каждым запросом. В данном случае, мы определяем Content-Type для каждого запроса. Метод m.Map() же позволяет привязать нашу структуру и использовать ее затем в контроллерах при необходимости (механизм dependency injection). В данном случае, я создал обертку для кодирования структуры данных в формат json.
Тут же мы создаем внутреннюю функцию Auth, которая проверяет авторизацию пользователя. Ее можно вставить в наши роуты и она будет вызываться до вызова контроллера. Эти вещи возможны благодаря Martini. С использованием стандартной библиотеки код получился бы немного другой.
Взглянем на файл errors.go пакета conf.
Язык поддерживает возврат нескольких значений. Вместо механизма try-catch, очень часто используется прием, когда вторым аргументом возвращается ошибка. И при ее наличии, она обрабатывается. Есть встроенный тип error, который представляет из себя интерфейс:
Таким образом, чтобы реализовать этот интерфейс, достаточно иметь метод Error() string. Я создал свой тип для ошибок ApiError, который более специфичен для моих задач, однако совместим со встроенным типом error.
Обратите внимание на — type ApiError struct. Это определение структуры, модели данных, которую вы будете использовать постоянно в своей работе. Она состоит из полей определенных типов (надеюсь, вы успели заметить, что тип данных пишется после имени переменной). Кстати, полями могут быть другие структуры, наследуя все методы и поля. В одинарных кавычках « указаны теги. Их указывать не обязательно. В данном случае они используются пакетом encoding/json для указания имени в выводе json (знак минус «-» вообще исключает поле из вывода).
Обратите внимание, что поля структуры написаны с заглавной буквы. Это означает, что они имеют область видимости за пределами пакета. Если написать их с прописной буквы, они экспортироваться не будут, а будут доступны только в пределах пакета. Это же относится и к функциям и методам. Вот такой простой механизм инкапсуляции.
Далее мы определяем предустановленные ошибки и заполняем их поля. Поля вида http.StatusBadRequest — это значения типа int в пакете http для стандартных кодов ответа, своего рода алиасы. Мы используем сокращенный синтаксис объявления структуры &ApiError<> с инициализацией. По другому можно было бы написать так:
Символ & означает получить указатель на данную структуру. Оператор new() так же возвращает указатель, а не значение. По-началу возникает небольшая путаница с указателями, но, со временем, вы привыкните.
Перейдем к нашим моделям. Приведу урезанную версию модели постов:
Здесь мы используем замечательный драйвер для MongoDb — mgo, чтобы сохранять данные. Для удобства, я создал небольшую обертку над api mgo — utils.NewDbSession. Логика работы с данными: сначала мы создаем объект во внутренней структуре языка, а затем, с помощью метода этой структуры, сохраняем его в базу данных.
Обратите внимание, что в этих методах мы везде используем наш тип ошибки conf.ApiError. Стандартные ошибки мы конвертируем в наши с помощью conf.NewApiError(err). Так же, важен оператор defer. Он исполняется в самом конце выполнения метода. В данном случае, закрывает соединение с БД.
Что ж, осталось взглянуть на контроллер, который обрабатывает запросы и выводит json в ответ.
Здесь мы получаем из URL id запрашиваемого поста, создаем новый экземпляр нашей структуры и вызываем на ней метод LoadById(id) для загрузки данных из БД и заполнения данной структуры. Которую мы и выводим в HTTP ответ, предварительно преобразовав в json нашим методом mu.Marshal(post).
Обратите внимание на сигнатуру функции:
Входные параметры нам предоставляет Martini с помощью механизма внедрения зависимостей (dependency injection). И мы возвращаем два параметра (int, []byte) — число (статус ответа) и массив байт.
Итак, мы разобрали основные компоненты и подходы, используя которые, вы сможете сделать эффективный RESTful API интерфейс в короткие сроки. Надеюсь, статья была полезна и вдохновит некоторых из вас заняться изучением замечательного языка Go. Уверен, за ним будущее.
Для изучения могу порекомендовать хорошую книгу на русском «Программирование на языке Go» Марка Саммерфильда. И, конечно, больше практиковаться.