Более 200 избранных ссылок на материалы о языке Go


Оглавление (нажмите, чтобы открыть):

Язык программирования Go: мнения и перспектива

Введение

Go – это язык программирования, который был разработан корпорацией Google. Часто его еще называют “Golang” – сокращение от “Google language”. Это компилируемый и многопоточный язык, релиз которого состоялся в ноябре 2009 года, а самый свежий выпуск 1.6 датируется февралем 2020 года. Одной из ключевых фигур, которые принимали участие в создании Go, является Роб Пайк, известный разработчик языков программирования, а также операционных систем, в данный момент работающий в Google. Выступая на одной из конференций, он отметил, что язык Go – это попытка перенять лучшие стороны таких языков, как C++ и Java.

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

Применение

Язык Go разрабатывался как язык для создания различных высокоэффективных программ, однако большинство программистов сходятся во мнении, что лучше всего он подходит для создания веб-приложений (в качестве back-end). При этом Go дает возможности писать и другие проекты, к примеру, Docker, InfluxDB и Kubernetes. По сути, применение языка Go ограничивается тремя основными направлениями: сетевое программное обеспечение, консольные утилиты и бэкенд.

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

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

Плюсы языка Go

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

Во-первых, это его простота. Язык Go разрабатывался в качестве замены C: его высокая производительность почти сопоставима с языком Си, но более простой синтаксис дает возможность разрабатывать приложения гораздо быстрее (к примеру, как на Python). При этом многие разработчики изучают этот язык после Python или PHP либо используют два языка в связке (Python/Go и PHP/Go). Упрощенный синтаксис облегчает не только написание своего собственного кода, но и чтение кода, написанного другими программистами, что особенно важно в командной работе. Эта особенность Go, в свою очередь, ведет к другому важному факту: быстрое освоение Go позволяет перевести внимание с изучения самого языка на изучение программирования в целом.

Программисты постоянно сравнивают язык Go с другими языками: в его пользу свидетельствует тот факт, что, к примеру, в PHP существует 67 ключевых слов, а в Go их всего лишь 25.

Тут необходимо сделать отступление и сказать о том, что желание создать простой язык программирования родилось у разработчиков Google неслучайно: изначально они задумывали Go как быстро изучаемый язык, который запросто могут выучить несколько не очень опытных программистов для того, чтобы затем вместе писать какое-нибудь приложение. Именно поэтому некоторые считают язык Go языком, пригодным для больших корпораций, где в разработке продуктов будет участвовать множество разных людей. Как уже было замечено выше, простой и понятный синтаксис ведет к тому, что программистам Go не нужно вводить какие-то другие стандарты, обозначения или комментарии – они и без этого отлично поймут код друг друга. Многословность Go радует одних разработчиков и огорчает других, но именно благодаря ей код Go читается так легко.

Поэтому некоторые компании (к примеру, CrowdStrike) сознательно переходят с других языков программирования на Go для того, чтобы в дальнейшем более легко расширять пул своих разработчиков.

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

В-третьих, Go это компилируемый язык, на котором можно быстро написать необходимое приложение. Go имеет такую же строгую статическую типизацию, как Pascal, но в то же время он имеет гораздо больший прикладной характер (и это роднит его с Python). Тут необходимо отметить высокую производительность Golang, которая характерна для компилируемых языков. Также в Go значительно облегчена кроссплатформенность.

Нельзя не отметить и четкую направленность языка Go: в отличие от PHP, на котором пишут большие проекты, Go больше предназначен для некрупных сервисов, которые необходимо быстро написать и внедрить, но которые должны отличаться чрезвычайной надежностью (так называемое robust software).

Развертка Go-приложения также выглядит намного проще, чем развертка приложения, написанного на PHP. Программируя на Go, вы можете создать артефакты для всех операционных систем или архитектур процессора, вам не нужно будет устанавливать Go на используемые вами сервера.

Синтаксис Go может быть непривычен тем, кто до этого программировал на PHP или Python. Если рассматривать код Go в сравнении с PHP, то Go не имеет объектов или классов, зато в нем есть структура, а точнее тип, который содержит именованные поля:

Еще одной причиной, по которой Go завоевывает все большую популярность, является наличие go fmt – инструмента, который помогает стандартизировать код. А использование go vet поможет вам найти возможные проблемы в коде. Иными словами, авторы языка Go попытались максимально упросить задачу разработки приложений на этом языке, особенно для новичков.

Именно поэтому многие на данный момент считают Go одним из лучших языков программирования и советуют изучать его не только студентам, но и школьникам. Кстати, такой прецедент уже был: учитель научил несколько 11-летних школьников писать и разбираться в коде на таком уровне, что они смогли написать генератор фракталов Мандельброта. А главное, для этого ему понадобилось всего 12-13 часов!

Минусы языка Go

В качестве негативной стороны Go часто называют его малую на данный момент распространенность – действительно, есть куда более распространенные языки программирования, которые используются для выполнения большинства задач. Значит ли это, что изучать Go не стоит? Совсем нет. Существует множество корпораций, которые используют язык Go в своих разработках. В первую очередь это, конечно же, Google Inc., а также Basecamp, BBC Worldwide, Canonical, DigitalOcean, Dropbox, eBay, Yahoo и многие другие компании по всему миру. Поэтому перспективы у этого языка программирования точно есть. Безусловно, программисты Go могут быть менее востребованы, чем, к примеру, PHP-разработчики, однако и конкуренция ниже, а значит, выше шанс найти интересную и хорошо оплачиваемую работу.

Те, кто пытается предугадать перспективы языка Go, также говорят о другом минусе, который фактически является противоположностью предыдущего пункта: из-за легкости языка, а значит, низкого порога вхождения количество людей, программирующих на Go, будет расти в геометрической прогрессии, при этом качество кода и сами проекты будут оставлять желать лучшего. Похожая ситуация в начале XXI века случилась с PHP, когда на этом языке стало писать множество начинающих программистов, не очень волнующихся за работоспособность своего кода (и готовых получать небольшую плату за свой труд). Отличие PHP от Go на данный момент заключается в том, что PHP в итоге стал полноценным языком с богатой инфраструктурой и множество фреймворков, без знания которых вы едва ли найдете хорошую работу. Go же позиционируется как простой язык, поэтому перспективы его развития не очень определены.

В рамках данной статьи я не буду останавливаться на сугубо технических моментах, которые вызывают недоумение у программистов, так как это абсолютно субъективные впечатления. Вопросы часто вызывает система типов, отсутствие дженериков, перегрузки операторов, возможности расширить ключевые слова, а также многое другое. Безусловно, Go не является идеальным языком, и при первом знакомстве с ним кому-то может не понравится различия с более привычным ему языком программирования.

Вывод

Язык Go еще достаточно молод для того, чтобы говорить о какой-то определенной перспективе. Однако уже сейчас многие воспринимают Go как современный или даже передовой язык, который способствует развитию языков программирования в целом. Даже если вы уже долго время являетесь сторонником какого-то определенного языка программирования, Go может предложить вам много новых инструментов, которые расширят ваш кругозор или даже вызовут желание разрабатывать приложения на Go. При этом вы потратите минимальное время на знакомство с синтаксисом этого языка (вплоть до пары дней), поэтому даже если ваши ожидания в отношении Go не оправдаются, вы получите интересный и ценный опыт.

Введение в язык Go

Что такое Go

Go представляет компилируемый статически типизированный язык программирования от компании Google. Язык Go предназначен для создания различного рода приложений, но прежде всего это веб-сервисы и клиент-серверные приложения. Хотя также язык обладает возможностями по работе с графикой, низкоуровневыми возможностями и т.д.

Работа над языком Go началась в 2007 в недрах компании Google. Одним из авторов является Кен Томпсон, который, к слову, является и одним из авторов языка Си (наряду с Денисом Ритчи). 10 ноября 2009 года язык был анонсирован, а в марте 2012 года вышла версия 1.0. При этом язык продолжает развиваться. Текущей версией на момент написания данной статьи является версия 1.12, которая вышла в феврале 2020 года.

Язык Go развивается как open source, то есть представляет поект с открытым исходным кодом, и все его коды и компилятор можно найти и использовать бесплатно. Официальный сайт проекта — https://golang.org, где можно много полезной информации о языке.

Go является кроссплатформенным, он позволяет создавать программы под различные операционные системы — Windows, Mac OS, Linux, FreeBSD. Код обладает переносимостью: программы, написанные для одной из этих операционных систем, могут быть легко с перекомпиляцией перенесены на другую ОС.

Основные особенности языка Go:

компилируемый — компилятор транслирует программу на Go в машинный код, понятный для определенной платформы

присутствует сборщик мусора, который автоматически очищает память

поддержка работы с сетевыми протоколами

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

В настоящее время Go находит широкое применение в различных сферах. В частности, среди известных проектов, которые применяют Go, можно найти следующие: Google, Dropbox, Netflix, Kubernetes, Docker, Twitch, Uber, CloudFlare и ряд других.

Что нужно для работы с Go? Прежде всего необходим текстовый редактор для набора кода и компилятор для преобразования кода в исполняемый файл. Также можно использовать специальные интегрированные среды разработки (IDE), которые поддерживают Go, например, GoLand от компании JetBrains. Существуют плагины для Go для других IDE, в частности, IntelliJ IDEA и Netbeans.

Установка компилятора

Пакет для установки компилятора можно загрузить с официального сайта https://golang.org/dl/.

По этому адресу пакеты установщиков для различных операционных систем. Так, при загрузки и запуске установщика для Windows открывается следующее окно:

После принятия лицензионного соглашения отобразится окно для выбора места установки:

По умолчанию используется путь «c:\go». Оставим этот путь по умолчанию и перейдем к следующему окну, на котором нажмем на кнопку Install:

Более 200 избранных ссылок на материалы о языке Go

69’517 подписчиков
14’726 просмотров на пост

Полезные материалы по всему, что может быть интересно программисту.

Детальная рекламная статистика будет доступна после прохождения простой процедуры регистрации

  • Детальная аналитика 70’046 каналов
  • Доступ к 28’004’146 рекламных постов
  • Поиск по 112’332’059 постам
  • Отдача с каждой купленной рекламы
  • Графики динамики изменения показателей канала
  • Где и как размещался канал
  • Детальная статистика по подпискам и отпискам

Найдено 1677 постов

14 наиболее полезных особенностей Chrome DevTools

Chrome DevTools – это инструмент, предназначенный для веб-разработчиков. В этой статье представлено несколько фишек, про которые вы, скорее всего, не знаете.

Arduino — это торговая марка аппаратно-программных средств для построения простых систем автоматики и робототехники. Программная часть состоит из бесплатной программной оболочки (IDE) для написания программ, их компиляции и программирования аппаратуры. В этой оболочке имеется текстовый редактор, менеджер проектов, препроцессор, компилятор и инструменты для загрузки программы в микроконтроллер. Оболочка написана на Java на основе проекта Processing и работает под Windows, Mac OS X и Linux.
Аппаратная часть представляет собой набор смонтированных печатных плат.

Из данного видеокурса вы узнаете:
— что такое Arduino
— структуру и типы данных Arduino
— действия с переменными и константы
— работу с монитором COM порта
— об условном операторе if и операторе выбора
— о временных функциях
— о подключениях светодиодов
— о потенциометрах и аналоговых пинах
— о том, как создать свою функцию
и о многом другом

Ссылка на плейлист: https://www.youtube.com/watch?v=nrczO8tWJNg&list=PLgAbBhxTglwmVxDDC5TSYUI91oZ0LZQMw

Новый подход в Deep Learning: популяционное обучение нейросетей

Рассказываем о новом подходе, предложенном компанией DeepMind для настройки гиперпараметров в моделях Deep Learning: популяционное обучение нейросетей.

Почему не стоит использовать сторонний CSS на своем сайте

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

Поднимаем свой socks5 proxy-сервер

Вводятся постоянные блокировки, и может возникнуть потребность в бюджетном способе их обхода, например, использование socks5. Как это сделать? Рассказываем в нашем материале.

Пока еще блокировки не начались, хотим проанонсировать наш новый Instagram-аккаунт, где мы будем размещать обзоры актуальных книг и новинок.

Суд постановил заблокировать Telegram.

Устанавливайте срочно любой VPN, если еще не успели. Или, если не хотите с этим разбираться, попробуйте прокси-бот @socks5_bot (не реклама).

10 лучших чатов и Telegram-каналов по разработке игр

Не знаете, к кому обратиться с проблемой по разработке игр? Приводим список ресурсов, где помогут, и есть море информации по геймдеву.

Напоминаем про способы обхода блокировок.

Каким программистам больше пишут рекрутеры — исследование Djinni

Ресурс djinni проанализировал, каким программистам больше всего пишут рекрутеры. Результаты местами оказались неожиданными.

От новичка до профи в блокчейн-технологиях за 2 месяца

Разбираемся в блокчейн-технологиях – криптовалютах и инструментах для децентрализованных приложений – самостоятельно и за два месяца.

Как подготовиться к собеседованию на должность программиста

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

Видеокурс. Введение в алгоритмы

1. Пример простого алгоритма
2. Знакомство с алгоритмами
3. Разделяй и влавствуй
4. Сложность алгоритмов и Big O
5. Графы
6. Структуры данных
7. Деревья и двоичные деревья
8. Машина Тьюринга
9. P и NP

Ссылка на плейлист: https://www.youtube.com/watch?v=8JlTwMg1dyw&list=PLwwk4BHih4fjIT5cT4i1s93b99aJScUGB

Команда разработчиков платформы для торговли на финансовых ранках ищет в свои ряды фронтенд или фуллстек разработчиков.


Какая сортировка самая быстрая? Тестируем алгоритмы

На собеседованиях часто спрашивают, какая сортировка самая быстрая. Вопрос с подвохом. Объясняем, почему, и ищем оптимальный вариант.

15 интересных CSS и JavaScript библиотек на апрель 2020

Подготовили для вас дайджест новых и интересных CSS и JavaScript библиотек, на которые обязательно следует обратить свое внимание.

Вы прочитали много книг по программированию и хотите поделиться своим мнением о них? Или просто хотите побыть в роли книжного критика и рецензента? Мы ищем автора рецензий на книги по программированию.

Подробности в нашей новой вакансии: https://telegra.ph/Razyskivaem-avtora-recenzij-04-09

Бесплатный видеокурс по изучению Python 3 от codebasics

В курсе освещаются основы языка, работа с файлами, итераторами и JSON. Даются основы ООП. Также в конце присутствует небольшой разбор библиотеки numpy.

Материал разбит на короткие видео. Подойдёт для изучения как новичкам, так и опытным программистам, желающим перейти на Python.

Мастер Йода рекомендует:  Как установить плагин для WordPress – руководство для новичков

Сложная геометрическая головоломка с красивым решением

Пишем свою нейросеть: пошаговое руководство

Отличный гайд про нейросеть от теории к практике. Вы узнаете из каких элементов состоит ИНС, как она работает и как ее создать самому.

Малоизвестные преимущества Go: почему стоит выучить этот язык и с чего начать

Язык программирования Golang разработали в Google ещё в 2009 году, но стремительно набирать популярность начал только в последние годы. Разработчик Кирилл Роговой в своём блоге рассмотрел некоторые важные особенности Go. Материал доступен даже тем, кто не имеет опыта работы с Go, а в конце статьи можно найти ссылки на полезные ресурсы, которые помогут поближе познакомиться с этим языком.

GoDoc

Документации в Go — как и простоте — уделяется особое внимание. GoDoc — это инструмент статического анализа, который автоматически генерирует документацию из кода. В отличие от JavaDoc, PHPDoc или JSDoc, в GoDoc примечательно то, что для аннотирования инструмент использует исключительно английский язык.

GoDoc извлекает максимум информации из кода, чтобы структурировать и форматировать документацию. Она будет содержать всё необходимые «фишки» вроде перекрёстных ссылок, примеров кода и прямых ссылок на репозиторий системы управления версиями. Любой комментарий автоматически отражается в документации. Можно также добавлять фрагменты кода и их запускать прямо в браузере или локально.

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

Статический анализ кода

Значительное место в Go отведено статическому анализу. Подтверждение этому — такие инструменты, как godoc для создания документации, gofmt для форматирования кода, golint для его анализа и выявления возможных ошибок и многие другие. Все они объединены в единую утилиту контроля качества GoMetaLinter, которая запускает параллельно все анализаторы кода. Эти инструменты запускаются и как отдельные приложения командной строки и легко интегрируются с любой средой разработки.

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

Встроенная среда тестирования

В Go есть встроенный инструмент для тестирования кода с акцентом на простоту и эффективность. Он предлагает простейший API и содержит минимум утверждений. Его можно использовать для тестирования и профайлинга, а также добавлять исполняемые образцы кода.

Чтобы запустить тестирование, достаточно выполнить команду go test. Инструмент позволяет выполнять тесты параллельно, пропускать их, и много чего другого.

Обнаружение состояний гонки

Для достижения многозадачности язык использует легковесные потоки goroutines и каналы в качестве средства взаимодействия между ними. Здесь можно найти их краткий обзор.

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

Авторы Go серьёзно подошли и к этой проблеме, создав мощное средство для обнаружения гонок, полностью интегрированное в инструментарий языка. Подробнее о Race Detector можно прочитать в блоге Go.

Доступность

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

Go значительно проще освоить, чем Java, Javascript, Ruby, Python или даже PHP. Среду разработки достаточно легко настроить, а от команды понадобится намного меньше усилий для создания готового кода.

Рефлексия

Рефлексия — это способность добраться до различного рода метаинформации о таких конструкциях языка, как переменные или функции. Так как Go — статически типизированный язык, он имеет некоторые ограничения в плане обобщённого программирования, особенно в сравнении с динамическими Javascript или Python.

Также в Go нет так называемых дженериков, что несколько лишает его преимуществ абстрактного подхода в программировании. Но многие считают это плюсом Go из-за сложности, которую привносят обобщённые типы.

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

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

Ограничения

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

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

Культура

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

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

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

Полезные ресурсы

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

Более подробно о преимуществах Go – в блогах на Medium:

Go. Объясняем на примерах

Перевод на русский язык книги «Go by example» за авторством Mark McGranaghan aka mmcgrana. По окончании работ будет подготовлен PDF-файл для оффлайн-чтения. Репозиторий проекта на BitBucket: [1].

Автор перевода: sorrymak (the_electric_hand), используются наработки village_geek (Павел Павленко, [2]). Отдельная благодарность Максиму Полетаеву ([3]), Виктору Розаеву и другим авторам и переводчикам книг о языке программирования Go.

Содержание

Hello World [ править ]

Нашей первой практикой в Go будет helloworld — программа, печатающая “hello world” (“привет всем”) в терминале. Ниже приведён её полный исходный код:

Чтобы выполнить эту программу, необходимо создать файл hello-world.go и выполнить команду go run:

Если нам необходимо собрать программу в единый бинарный файл, то мы можем использовать команду go build. Полученный файл можно просто запустить, как любой другой исполняемый:

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

Значения [ править ]

В языке программирования Go есть значения нескольких типов: строки, целые числа, числа с плавающей точкой (вещественные), логические значения. В коде ниже можно встретить несколько примеров:

Переменные [ править ]

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

С помощью ключевого слова var можно объявить одну или сразу несколько переменных, при этом при использовании Go самостоятельно определит их тип. Переменные, которые были объявлены, но которые ещё не были инициализированы, имеют нулевое значение (zero-valued). Как видно на примере выше, переменная e имеет значение 0.

Оператор := может служить заменой ключевому слову var. Так, выражение f := «short» эквивалентно выражению var f string = «short» .

Константы [ править ]

В Go поддерживаются константы нескольких видов: символы, строки, логические и численные значения.

Константы объявляются с помощью ключевого слова const, и, как видно на примере выше, выражения с этим ключевым словом могут находиться в любй части программы — так же, как и выражения с var.

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

У численной константы нет типа до тех пор, пока он не присвоен явным образом, например, так: fmt.Println(int64(d)) . Также числу может быть присвоен тип в том случае, если этого требует контекст, в частности, в случае присвоения переменной или вызова функции. Так, в примере выше, math.Sin имеет тип float64.

For [ править ]

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

Мы увидим прочие разновидности конструкции for в следующих разделах, когда будем рассматривать диапазоны (ключевое слово range), каналы и прочие структуры данных.

If/else [ править ]

Ветвление в Go осуществляется с помощью операторов if и else.

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

В языке программирования Go нет так называемого тернарного оператора, вместо него необходимо использовать описанную в этом разделе конструкцию if/else.

Switch [ править ]

Оператор switch предназначен для множественного ветвления.

Массивы [ править ]

Массивы в Go — это нумерованная последовательность элементов, для которой задана определённая длина.

Стоит отметить, что при выводе массивов с помощью функции fmt.Println они появляются в форме [знач1 знач2 знач3 . ].

В следующем разделе мы рассмотрим срезы, которые как правило используются чаще, чем массивы.

Срезы [ править ]

Срезы — это одна из ключевых структур данных в Go, которая даёт бо́льшую гибкость в сравнении с массивами.

Несмотря на то, что срезы серьёзно отличаются от массивов, при их выводе с помощью функции fmt.Println они появляются в той же форме — [знач1 знач2 знач3 . ].

Если вы хотите узнать больше о внутреннем устройстве срезов, обратите внимание на этот пост в блоге разработчиков языка программирования Go: [4] (англ.).

В следующем разделе мы рассмотрим ещё одну структуру данных, а именно — хеши.

Хеши [ править ]

Хеши — это ассоциативная структура данных ([5]), иногда называемая картами или словарями.


При выводе хешей с помощью функции fmt.Println они появляются в форме [ключ:знач ключ:знач].

Range [ править ]

С помощью ключевого слова range можно обойти (iterate) все элементы какой-либо структуры данных. На примерах ниже мы покажем, как использовать range со срезами, массивами, хешами и строками.

Функции [ править ]

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

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

Возврат нескольких значений [ править ]

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

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

Вариативные функции [ править ]

Вариативные функции ([6]) — это функции, которые принимают произвольное число аргументов. Примером вариативной функции является fmt.Println.

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

Замыкания [ править ]

Язык программирования Go поддерживает анонимные функции ([7]), которые могут использоваться для формирования замыканий ([8]). Анонимные функции бывают полезны, когда нужно “завернуть” код в функцию, не присваивая ей имени.

В следующем разделе мы рассмотрим ещё одну возможность функций — рекурсию.

Рекурсия [ править ]

Go поддерживает рекурсивные функции ([9]). Ниже мы приводим классический пример с факториалом.

Функция fact вызывает саму себя до тех пор, пока наконец не достигнет значения fact(0).

Указатели [ править ]

Go поддерживает указатели ([10]), позволяющие передавать адреса ячеек памяти.

Мы объясним принципы работы указателей на примере двух функций, zeroval и zeroptr. У функции zeroval есть целочисленный (int) параметр, поэтому аргумент будет передан по значению (по умолчанию). zeroval получит копию значения, переданного через вызов функции.

У zeroptr же, в отличие от zeroval, есть параметр *int, что означает, что эта функция принимает в качестве аргумента целочисленный указатель. Далее в функции происходит так называемое разыменование указателя, после чего ему присваивается новое значение, что приводит к изменению значения в ячейке памяти.

С помощью синтаксиса &i можно получить адрес ячейки памяти i, т.е. указатель на i.

Указатели тоже можно вывести на печать, как видно на примере выше.

zeroval не меняет значение i в функции main, но zeroptr меняет, потому что обращается к значения в памяти для этой переменной.

Структуры [ править ]

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

Методы [ править ]

Методы — это особые функции, связанные со структурами (и не только).

В следующем примере мы рассмотрим механизм, предназначенный для группирования связанных методов — интерфейсы.

Интерфейсы [ править ]

Интерфейсы — это группы сигнатур методов, имеющие своё имя.

Если вы хотите узнать больше об интерфейсах в Go, обратите внимание на эту статью: [11] (англ.).

Ошибки [ править ]

Для обработки ошибок в Go принято использовать отдельное возвращаемое значение, в отличие от, к примеру, Java или Ruby, в которых принято использовать механизм исключений, или C, в котором иногда для этого используется единственное значение. Используемые в Go методы позволяют легко увидеть, какие функции возвратили ошибки, и обработать их стандартными средствами языка.

Чтобы узнать больше об обработке ошибок в Go, стоит обратить внимание на этот пост: [12] (англ.).

Горутины [ править ]

Горутина — это легковесный поток выполнения (тред).

Когда мы запускаем эту программу, в начале мы видим вывод первого (блокирующего) вызова, затем чередующийся вывод двух горутин. Чередование означает, что эти горутины выполняются одновременно.

В следующем разделе мы рассмотрим каналы, которые являются дополнением к горутинам.

Каналы [ править ]

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

Во время выполнения программы сообщение “ping” успешно передаётся из одной горутины в другую с помощью нашего канала.

По умолчанию сообщения отправляются и принимаются только в том случае, когда горутины готовы к отправке/приёму сообщения. Благодаря этому нам не нужно было использовать fmt.Scanln как в прошлом примере.

Буферизация каналов [ править ]

По умолчанию каналы не буферизованы (unbuffered), что означает, что отправить в них сообщение (имя-канала Синхронизация каналов [ править ]

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

Если мы уберём Направления каналов [ править ]

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

Select [ править ]

select позволяет ожидать выполнения многоканальных операций. Совместив горутины, каналы и оператор select, мы можем получить мощный и полезный инструмент.

Как и ожидалось, мы получили сообщения “one” (“один”) и “two” (“два”).

Стоит отметить, что общее время выполнения составило всего около двух секунд, так как команды Sleep выполнялись одновременно.

Таймауты [ править ]

Таймауты используются в программах, которые подключаются ко внешним ресурсам, или в программах, которые должны выполняться определённое время. Благодаря каналам и оператору select, реализация таймаутов в Go проста и элегантна.

Выполняя эту программу, мы увидим, что время первой операции истекло (это и был таймаут), тогда как вторая успешно выполнилась.

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

Неблокирующие операции с каналами [ править ]

Обычно операции приёма или отправки сообщений в каналах блокируют эти каналы. Но с помощью оператора select с блоком default мы можем реализовать неблокирующую отправку, приём сообщений и даже неблокирующий многовариантный выбор (select).

Закрытие каналов [ править ]

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

Закрытие каналов мы будем использовать и в следующем разделе, посвящённом перебору значений в каналах.

Перебор значений в каналах [ править ]

В предыдущих примерах мы видели, как с помощью for и range мы можем обойти (iterate) все значения в основных структурах данных, но мы так же можем использовать эти операторы для обхода значений в каналах.

Этот пример также показывает, что мы можем закрыть непустой канал, при этом сохранив сообщения в нём.

Мастер Йода рекомендует:  Видеоуроки по созданию игры на C++

Таймеры [ править ]

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

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

Тикеры [ править ]

Таймеры предназначены для того, чтобы выполнить какое-то действие в будущем один раз. Тикеры же, в свою очередь, нужны, чтобы выполнять какое-то действие многократно через определённый интервал. В этом разделе мы увидим тикер, который “тикает” (по факту в нашем примере — печатает сообщение) до тех пор, пока не будет остановлен.

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

Наборы обработчиков [ править ]

В этом примере мы увидим, как реализовать набор обработчиков (worker pool), используя горутины и каналы.

Во время выполнения программы мы видим, как 9 заданий выполняются разными обработчиками. Несмотря на то, что суммарно обработчики выполнили 9 секунд работы, на выполнение программы ушло всего около 3 секунд, т.к. 3 обработчика работали одновременно.

Ограничение скорости [ править ]

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

Выполняя нашу программу, мы видим, что первая группа запросов обслуживается по одному каждые

200 миллисекунд, как и планировалось.

Но во второй группе первые 3 запроса были обслужены немедленно, благодаря возможности временного увеличения скорости. Оставшиеся же 2 запрсоа были обработаны как обычно, с задержкой в

Атомарные счётчики [ править ]

В основном для управления состоянием в Go используются каналы и передача сообщений через них (пример мы видели в разделе про наборы обработчиков). Но помимо этого есть и ещё несколько механизмов. В этом разделе мы рассмотрим пакет sync/atomic, который реализует так называемые атомарные счётчики, которые доступны сразу нескольким горутинам.

Запустив эту программу, мы увидим, что было выполнено примерно 40 тысяч операций.

В следующем разделе мы рассмотрим мьютексы, ещё один инструмент для управления состоянием.

Мьютексы [ править ]

В предыдущем разделе мы видели, как можно управлять простым счётчиком с помощью атомарных операций. Для более комплексного управления состоянием же мы можем использовать мьютексы ([13]), которые позволяют обеспечить безопасный доступ к данным более чем одной горутинам.


Выполняя программу, видим, что мы выполнили примерно 3,5 миллиона операций над state, синхронизировав доступ к нему с помощью мьютексов.

В следующем разделе мы выполним эту же задачу с помощью одних только горутин и каналов.

Горутины, сохраняющие состояние [ править ]

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

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

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

Сортировка [ править ]

В пакете sort представлены методы для сортировки типов данных, как встроенных, так и определённых пользователем. В этом примере мы рассмотрим сортировку данных встроенных типов.

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

Произвольная сортировка [ править ]

Иногда нам необходимо отсортировать срез не в обыкновенном порядке, а определённым специфическим образом. Например, отсортировать строки по их длине, а не по алфавитному порядку. Произвольная сортировка — тема этого раздела.

Выполнив нашу программу, мы видим, что была выполнена сортировка по длине, как мы и планировали.

Используя этот подход — создать произвольный тип, реализовать три метода интерфейса для него, и затем выполнить sort.Sort с набором данных этого типа — мы можем выполнять любую другую произвольную сортировку в Go.

Паника [ править ]

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

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

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

Defer [ править ]

defer используется для того, чтобы отложить вызов указанной функции до тех пор, пока не завершится текущая функция — он находит применение, например, в случае необходимости высвободить ресурсы. Аналогами defer в других языках являются ensure и finally.

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

Функции для работы с коллекциями [ править ]

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

В некоторых языках для этого принято использовать технологии обобщённого программирования ([14]), так называемые дженерики. Но Go их не поддерживает, вместо них Go-программисты, когда возникает такая потребность, предпочитают использовать функции для работы с коллекциями.

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

Функции для работы со строками [ править ]

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

Больше информации о функциях для работы со строками можно найти в документации к пакету strings: [15] (англ.).

Форматирование строк [ править ]

В Go содержится большое количество возможностей для форматирования строк в традиционном стиле printf. Ниже приведены несколько примеров решения подобных задач.

Дайджест: 300 ссылок на обучающие ресурсы по программированию

300 ссылок на обучающие ресурсы по программированию на языках JavaScript, Python, PHP, Ruby, C, C++, С#, Haskell, Scala и в их фреймворках.

�� Python

Учебные ресурсы по программированию

Лучшие GitHub репозитории для подписки

��Машинное обучение

Лучшие онлайн-курсы

Лучшие GitHub репозитории для подписки

Исследовательские публикации

Проверка моделей машинного обучения на датасетах

Книга по машинному обучению

��Глубокое обучение

Лучшие онлайн-курсы

Лучшие онлайн-книги

Лучшие GitHub репозитории для подписки

��Ресурсы по программированию под Android

�� Бэкенд-разработка

Ресурсы по программированию во фреймворке Django

Ресурсы по программированию во фреймворке Flask

Node.JS

Ресурсы по программированию на PHP

Ресурсы по программированию на Ruby

MongoDB

Архитектура программного обеспечения

�� Фронтенд-разработка

HTML5 and CSS3

Bootstrap4

Ресурсы по программированию на JavaScript

Фреймворки JavaScript

Angular

React.js

Redux.js

Vue.js

Ресурсы по программированию доступных интерфейсов

Инструменты фронтенд-разработки

Менеджеры пакетов

Упаковщики

��Структуры данных и алгоритмы

Онлайн-платформы

  • CodeChef — сайт соревновательного программирования
  • CodeSignal — игровой подход для соревнования по кодингу и практики для собеседований
  • Codeforces — подготовка к соревнованиям по программированию
  • GeeksforGeeks — вопросы по программированию, необходимые для устройства в крупных компаниях
  • Hackerearth — последовательность задач для новичков в программировании, желающих перейти на следующий уровень
  • Hackerrank Interview Preparation Kit — подборки задач по разным темам при подготовке к собеседованиям
  • InterviewBit — подготовка по структурам данных
  • LeetCode — оттачивание знаний по вопросам с реальных собеседований
  • Sphere Online Judge — изучение структур данных
  • UVa Online Judge — решение задач по структурам данных
  • Codewars — соревновательное программирование и подготовка к собеседованиям
  • CodinGame — соревновательное программирование с задачами в игровой форме
  • Codility — развитие навыков программирования
  • Zen of Programming — часто обновляемый блог для людей, желающих развиться в программировании

Закончил адаптацию книги-документации по языку Golang 🙂

Что такое Golang?
Go — это активно разрабатываемый и свободно распространяемый язык программирования, изначально созданный одним из создателей Unix (Rob Pike). Киллфича Go заключается в его убойной простоте. Код на Go легко читать и писать, бинарники только и только собраны статически и легко подвергаются горизонтальному масштабированию. Go безумно быстро компилируется.

Кто уже использует Go?
Google: завлечение восторженных хомячков
Twitch: чаты, сбор статистики
Dropbox: практически все высоконагруженные сервисы
CloudFlare: Railgun, сетевые утилиты
Heroku: Doozer
SoundCloud: нагруженный бэкенд

А так же в разнообразных проектах Go используют такие компании, как Baidu, DigitalOcean, Disqus, Docker, GitHub, New York Times, Parse, Square, Tumblr, Twitter, и другие.

Какая у этого языка область применения?
Основная область применения Go — эксперименты под кроватью, домашние сервера и администрирование локалхостов. Тем не менее, это не мешает использовать Go и для других задач: киллфичей Go вовсе не является его производительность, а эффективность на большой кодбазе. Как известно, нагрузка приходит очень быстро и незаметно. Если у тебя, как стартапера, нет желания докупать все больше и больше серверов под кровать, чтобы твои толстые апплеты на Java могли работать под нагрузкой, то Go тебе однозначно понравится.

Что за язык Go, и где его можно хостить?

Здравствуйте, выскажите своё отношение к языку ‘Go’ от компании google, задаю этот вопрос, потому что по нему как-то не нашлось холиваров и толком не знаешь, как относятся к этому языку люди.

И, стоит ли его изучать как первый серверный язык ? И как его хостить (на каком хостинге, например (кроме vps)) ?

  • Вопрос задан более трёх лет назад
  • 7132 просмотра

как первый однозначно нет.
у него явно есть будущее, но молодому специалисту кушать хочется уже сегодня, а с посиком работы на нем будет куда сложнее чем на том же php/python
кстати его основное преимущество которое часто вспоминают в холиварах ─ скорость и экономное потребление памяти, но не стоит забывать что это имеет смысл для реально долгих операций с данными
поясню ─ если к вам на бэкенд приходят гигабайты данных которые нужно обработать (ладно пусть мегабайты, думаю тоже будет заметно) то go хороший выбор, он сделает это со cскоростью java/skala но при этом в разы меньше съест ресурсов (читал статью где благодаря go заменили 30 серверов на 2)
Если у вас обычный сайт который ходит в бд и отдает данные на страничку, то благодаря ngnix особой разницы go и php вы не заметите, кроме трудозатрат)) так как количество фреймворков, библиотек сильно меньше. Да есть и орм и многое другое, но все пока молоддое

Это не минус go, просто не надо воспринимать его как серебряную пулю, ее нет.

Я редко встречаю go программистов, они быстро умирают с голоду

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


зыыы повторюсь дабы не вызвать холивар, я не против go и он займет свою нишу, но убийцей php/python чего то еще в ближайшие 10 лет не станет, в it вообще с убийствами плохо, все что уже в энтерпрайзе так просто не убьешь )

Я попробовал решить на Golang’е все задачи что у меня накопились за 8 лет в PHP, вышло что уровень возможностей с переходом вырос на несколько порядков. В PHP бессмысленно совершенствоваться потому что потолок очень низкий, как только до него доходишь — начинаются пляски и бубны с:
1. PHP Extensions
2. всё равно приходится залазить в код PHP и смотреть почему иногда он работает не адекватно
3. подключать внешние костыли, очереди, скрипты и прочее.
4. делать демоны на PHP одно «удовольствие», что бы гарантировать клиентам адекватную работу с течением времени надо не хило приложиться усилиями
5. выдумывать различные связки что бы один скрипт не убил всё
6. однажды понимаешь как делать пакетную обработку данных на PHP и всё становится веселее:)

P.S. Рынок веб-разработки (вы упоминали upwork), сайто-строение для среднего и малого бизнеса это далеко не весь рынок, а лишь оооочень маленькая часть. Сейчас всё больше и больше компаний не играет в этой лиге.

gadfi: ну в общем «рынок студентов за копейки» он конечно не про Golang:) Особенность таких споров именно в том что один уже использует, а другой именно что «рассматривал» и «не рассмотрел» в пользу какого-то другого языка.

В микросервисной архитектуре можно использовать любые языки программирования, хоть бейсик если захочется и найдутся библиотеки для HTTP или чего-нить ещё для взаимодействия с внешним миром.

Если вас интересуют какие-то конкретные вопросы связанные с Golang и в которых вы не уверены (и именно по этому решили таки его не использовать), то это дело поправимо, можно и рассказать на эту тему.

Вот список того что мне нравится в Golang уже сейчас:
1. производительность, да он адекватно шустрый и я делаю одно действие только один раз, а не при каждом запуске скрипта, алгоритмы упрощаются
2. я пишу в основном серверные варианты (демоны) и гарантировать что они работают и будут работать очень просто, вот что я виду:
— нагрузка предсказуемо распределена по всему приложению
— очень простые потоки (горутины) и работа между ними (то что всегда хотелось в Си, но что в Си делалось куда как сложнее и чего в PHP нет и ещё долго не будет)
— отсутствие исключений, по своей сути в Golang только два вида ошибок — методы возвращают сразу несколько значений, одно из которых можно использовать для возвращения ошибки определённого типа (по сути везде во всех библиотеках используется один и тот же интерфейс ошибки, хоть иногда и с разными реализациями) и panic ошибки которые приводят к полному завершению приложения
— возможность обрабатывать стандартные ошибки как стандартную практику программирования
— возможность обрабатывать panic ошибки изолированно в определённом куске кода, например я знаю что здесь «сложный кусок говна» и если там что-то вдруг упадёт в panic то я знаю что хочу сделать при этом. Например пропустить текущую итерацию и перейти к следующей, при этом на всё оставшееся приложение это не повлияет никак
— отличная работа с памятью, хотя в 1.4 и более ранних версиях наблюдались до 30 секунд залипания при сборке мусора, но это наблюдалось только на 900 миллионах поинтерах и легко снижалось до 3 секунд при определённых манипуляциях (можно посмотреть доклад badoo.com на эту тему), в 1.5 с этим обещали покончить и уже потихоньку приходят тому подтверждения
— единообразие, как синтаксиса так и оформления библиотек
— по настоящему правильно сделанная документация напрямую показывающая все связи в коде (в основном благодаря статической типизации которая тут очень важна), теперь нет такого что код написан так, а документация эдак и не совпадают. Всегда можно посмотреть что там на самом деле
— качество библиотек хорошее, а при желании можно и переписать
— можно переписать стандартные библиотеки входящие в язык программирования, потому что они написаны на том же Golang, в PHP всё совсем не так и мало кто из PHP программистов могут там что-то сделать
— отличная работа со сложными вещами — по сути всё байты
— отличные методологии работы с данными, io.Reader чего только стоит:)

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

В официальной документации к встроенным в PHP библиотекам (например GD) есть расхождение с действительностью и вы этого не узнаете пока ну сильно не копнёте вглубь.

В Golang’е приходится решать всё теже проблемы что и при использовании других языков программирования:
1. какие конфиги и как использовать, а что делать если я захочу рестартнуть приложение перезагружая только конфиги, а не саму программу? а как не читать файлы конфигов по сто раз?
2. как подключиться к базе данных что бы это не было болью? как передать доступ в базу модулям? как красиво и удобно получать данные из базы?
3. как бы сделать такой ORM что бы удовлетворял конкнкретным потребностям и может быть такой уже написан?
И ещё куча других вопросов. от роутинга, до архиваторов.

Мастер Йода рекомендует:  Vim 7 привычек для эффективной работы с текстом

Другой вопрос в том что потенциально в Golang это решается продуктивнее. важно лишь понимать какие алгоритмы вам нужны для решения тех или иных задач. Если не понимаете как работает ORM вашей мечты то стоит это выяснить и построив его в Golang точно будете приятно наблюдать результат.

Вот отличная статья об использовании Golang как первого языка программирования у школьников.
habrahabr.ru/post/264643/comments

Про то что в Golang сложнее получить опыт. мир вообще сложная штука, сложно сравнивать что сложнее, на самом-то деле:) Вот Си сложный язык, после Golang, который на него в чём-то похож, начинаешь проще и к Си относится.

Вы пока просто не замечаете как много пишут на Golang’е уже сейчас, критическая точка или уже пройдена или будет пройдена в течении полугода-года.

Надо понимать что PHP и Golang во многом разные языки программирования и опыт у них в разном. Вот мой список причин почему вам стоит попробовать что-то сделать работающим на Golang вместо того что бы доказывать его не состоятельность:
1. что бы разобраться в Golang достаточно дня, за два месяца можно написать с нуля сложный код, с многопоточностью, веб-сервером и кучей всего
2. производительность вас действительно порадует, а ещё подход к тому как это работает. Всё таки есть большая разница между скриптами и демонами которые надо запускать лишь единыжды
3. у вас будет доступ к отличной, если не самой лучшей, документации, в том числе к тем пакетам которые написали сущие ламеры (благодаря godoc)
4. у вас изменится мировозрение, вы поймёте что можете при желании сделать что угодно, что потолок ограничений не такой уж и низкий, а в PHP он просто катастрофически ниже вашего текущего в Golang
5. вы сможете полагаться на сильные стороны которых у вас ещё не было в самых рутинных, казалось бы, вещах, получая от этого удовольствие и профит
6. вам есть куда расти, сейчас все компании первой величины либо уже опубликовали вакансии либо уже имеют один-два отдела которые пишут на Golang: Яндекс, Mail.Ru Group, Google, Badoo, DigitalOcean, The New York Times, вот ещё небольшой список https://github.com/golang/go/wiki/GoUsers и он далеко не полный.

Опять таки вы дискутируете потому что не потратили на это время что бы говорить о том что оно не подходит.

У меня был план по переходу на Node.js с последующим переходом на Golang, потому что я тоже не знал что там внутри, как оно всё выйдет и не мог себе позволить заниматься тем что не понятно принесёт ли профит или нет. В результате первый же проект на Node.js показал его сырость в стандартной http библиотеке, я постарался починить или разобраться почему простая и логичная для меня вещь там не работает, но заглянув в череду js файлов движка понял что там сущий ад. Конечно на это можно потратить время и таки разобраться и жить с Node.js хорошо, но смысл? Мне не понравилось качество на примере. Тогда я решил уделить неделю на Golang что бы понять а сложно ли будет пропустить процесс миграции на Node.js что бы перейти сразу на Golang. и чем больше я им занимаюсь тем больше он мне нравится. Даже по тому скудному опыту с Node.js могу сказать что по сравнению с Golang он полный шлак и профита в том что бы его мучать никто так толком и не представил.

Есть ещё одна опасность выбора «языка попроще» для начала, с последующим переходом на что-то посложнее, вроде Golang. Вы теряете время. 8 лет на PHP могут дать многое, но скорость обучения, скорость осознания там маленькая, а то что можно взять с собой дальще — очень не велико.
В PHP вы учите то как это делать именно в PHP, запоминаете почему та или иная функция работает плохо и как это скрестись с чем-то ещё. В Golang’е у вас чистый язык программирования (хоть и с некоторыми плюшками) где вы думаете прежде всего об алгоритмах, вам уже нет нужды абстрагироваться от них через стопку функций в исходный код которых вы никогда в PHP не загляните. Здесь же это обязательная задача — посмотреть что внутри и понять подходит ли этот алгоритм или его надо переписать. Это отличный язык программирования, в том числе и в качестве первого.

Для многих первым языком был QBASIC 🙂 Вторым Turbo/Borland Pascal 🙂 Третьим Delphi. ну и так далее. все они не того же типа что и PHP и тому есть причина.

Хочу всё знать. Язык Go

Минутка истории

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

В 2007 году за разработку сели сотрудники компании Роберт Гризмер, Роб Пайк и Кен Томпсон. Кстати, до этого они занимались разработкой ОС Inferno на базе Plan 9, которая предназначена для построения сетевых и распределённых систем. Название произошло путём эволюции от Google Language к Golang и просто Go. До 2009 года велись работы по созданию синтаксиса, базовой архитектуры. Потом проект был обнародован, гики всех стран приглашены к совместной доработке и в итоге к 2012 году Go доведён до первой полноценной версии.

В народе новый язык не оценили – не так много компаний и тем более простых разработчиков нуждалось в оптимизации производительности проектов, а тут ещё и ограничение по совместимости с платформами (поддержка Plan 9 и Android появится лишь в конце 2014 года). Google тоже не способствовал популяризации языка – до легендарных поединков компьютера против человека в игру Го о языке знали только гики. Дальнейший рост популярности многие связывают как раз с частым мельканием в СМИ, но есть и другая версия. Обратите внимание на рейтинг TIOBE (у PYPL и других агрегаторов статистики он схож):

В период с июля по октябрь 2020 года произошёл скачок по запросам в 13 раз. Что за эпохальное событие произошло в середине прошлого года? Нет, это не очередная победа машины над человеком, это выход в свет мобильной игры Pokemon GO. Таким образом, искатели зверьков в дополненной реальности стали катализатором популярности языка программирования.

Синтаксис

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

Присваивание с выводом:

Классический цикл for:

Очень полезное свойство – for может не содержать аргументов (цикл бесконечный) или содержать только одно условие (аналог while).

Обратите внимание на фигурные скобки, в Go строго регламентировано место открытия и закрытия, дополнительные переносы не допускаются.

Вот пример Hello World:

В целом, синтаксис хоть и кажется немного устаревшим, имеющим много ограничений, но попробуйте поработать хотя бы 30 минут, и он вам понравится.

Что почитать

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

На западном рынке, разумеется, выбор богаче:

Для тех, кто любит работать с электронным материалом, есть онлайн-туториалы:

Ну и не забывайте про официальный сайт, там есть вся интересующая информация.

Перспективы

Плюсы Go очевидны:

  • Производительность. Это значит, что он – альтернатива использованию Cи-кода в приложениях, которые ограничены аппаратными возможностями.
  • Поддержка. Язык поддерживает и развивает Google, планов по сворачиванию проекта нет, так что он будет жить и развиваться ещё много лет.
  • Конкуренция. У Go есть альтернативы, но ни один из них не имеет явных преимуществ и могущественного покровителя, соизмеримого по мощи с Google.

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

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

Минутка истории

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

В 2007 году за разработку сели сотрудники компании Роберт Гризмер, Роб Пайк и Кен Томпсон. Кстати, до этого они занимались разработкой ОС Inferno на базе Plan 9, которая предназначена для построения сетевых и распределённых систем. Название произошло путём эволюции от Google Language к Golang и просто Go. До 2009 года велись работы по созданию синтаксиса, базовой архитектуры. Потом проект был обнародован, гики всех стран приглашены к совместной доработке и в итоге к 2012 году Go доведён до первой полноценной версии.

В народе новый язык не оценили – не так много компаний и тем более простых разработчиков нуждалось в оптимизации производительности проектов, а тут ещё и ограничение по совместимости с платформами (поддержка Plan 9 и Android появится лишь в конце 2014 года). Google тоже не способствовал популяризации языка – до легендарных поединков компьютера против человека в игру Го о языке знали только гики. Дальнейший рост популярности многие связывают как раз с частым мельканием в СМИ, но есть и другая версия. Обратите внимание на рейтинг TIOBE (у PYPL и других агрегаторов статистики он схож):

В период с июля по октябрь 2020 года произошёл скачок по запросам в 13 раз. Что за эпохальное событие произошло в середине прошлого года? Нет, это не очередная победа машины над человеком, это выход в свет мобильной игры Pokemon GO. Таким образом, искатели зверьков в дополненной реальности стали катализатором популярности языка программирования.

Синтаксис

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

Присваивание с выводом:

Классический цикл for:

Очень полезное свойство – for может не содержать аргументов (цикл бесконечный) или содержать только одно условие (аналог while).

Обратите внимание на фигурные скобки, в Go строго регламентировано место открытия и закрытия, дополнительные переносы не допускаются.

Вот пример Hello World:

В целом, синтаксис хоть и кажется немного устаревшим, имеющим много ограничений, но попробуйте поработать хотя бы 30 минут, и он вам понравится.

Что почитать

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

На западном рынке, разумеется, выбор богаче:

Для тех, кто любит работать с электронным материалом, есть онлайн-туториалы:

Ну и не забывайте про официальный сайт, там есть вся интересующая информация.

Перспективы

Плюсы Go очевидны:

  • Производительность. Это значит, что он – альтернатива использованию Cи-кода в приложениях, которые ограничены аппаратными возможностями.
  • Поддержка. Язык поддерживает и развивает Google, планов по сворачиванию проекта нет, так что он будет жить и развиваться ещё много лет.
  • Конкуренция. У Go есть альтернативы, но ни один из них не имеет явных преимуществ и могущественного покровителя, соизмеримого по мощи с Google.

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

5 причин, по которым мы перешли с Python на Go

Python крут. Особенно Python 3 со своей асинхронностью. Но, честно говоря, Go не дает другим языкам никаких шансов выжить в мире энтерпрайза.

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

Итак, с чем мы работали до использования Go?

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

  • React для фронтенда админки
  • Django Python для бэкенда админки и для сервиса аутентификации
  • Node.js для сервиса API
  • PostgreSQL как СУБД и Cassandra для логирования
  • Самописный контейнер зависимостей

Как вы видите, общая инфраструктура полностью основана на микро-сервисах, и большинство логики полностью разделено, причем используются разные технологии.

Это главная причина, почему мы начали задумываться о слиянии сервиса API и бэкенда в один проект, потому что в них есть много схожих вещей, а код дублируется в разных языках программирования и технологиях. Это избавляет от того, что нам нужно много работать над настройкой API сервисов Django, особенно над кастомными JSON-ответами.

После 1 месяца построения сервиса API на Django, я почувствовал, что Django весьма хорош, пока ты разрабатываешь что-то тривиальное, но когда ты хочешь больше производительности или создать свои модули, все становится сложнее и сложнее.

Почему Go?

Как я сказал ранее, язык Go — самый простой из всех языков программирования, которые я видел и с которыми я работал. Но для меня это было только первое впечатление.

Вот 5 основных причин, почему мы предпочитаем использование Go вместо Python Django

#1 Он компилируется в один бинарник

Go разработан как компилируемый язык. Разработчики Google проделали огромную работу для этого. Используя статичные ссылки он фактически комбинирует все зависимые библиотеки и модули в один единственный бинарный файл, основанный на типе ОС и архитектуре. Это значит, что если вы компилируете своё бэкенд-приложение на ноутбуке с Linux X86 CPU, вы можете просто загрузить скомпилированный бинарник на сервер, и он будет работать без необходимости установки зависимостей!

#2 Строгая система типизации

Система типизации переменных очень важна для больших расширяемых приложений. Python крутой язык, но иногда вы получаете необычные исключения, потому что пытаетесь использовать переменную как integer, но оказывается что это string.

Go даст вам знать о такого рода проблеме во время компиляции, посредством вывода ошибки. Вот где вы выигрываете время, не отвлекаясь на такие глупые проблемы.

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

Это может показаться удивительным, но в большистве случаев Go быстрее чем Python (2 и 3). Здесь приводятся результаты теста производительности, однако они не совсем справедливы, так как производительность зависит от типа приложения и случая его использования.

В нашем случае Go выполнился быстрее, благодаря своей модели параллельности и стабилизации CPU. Когда бы нам не пришлось работать с каким-то входящим запросом, мы делаем это отдельно с Goroutine, который потребляет в 10 раз меньше ресурсов, чем Python Threads. Таким образом мы сохранили много ресурсов (память, CPU) благодаря встроенным возможностям языка.

#4 Вам не нужен веб-фреймворк для Go

Это самая приятная вещь в языке программирования. Создатели Go и сообщество разработчиков имеют так много встроенных инструментов, поддерживаемых ядром языка, что в большинстве случаев вам в правду не нужна никакая сторонняя библиотека. Например, там есть http, json, шаблонизатор html, и вы можете разработать вполне сложные сервисы API, даже не задумываясь о том, чтобы поискать библиотеку на Github!

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

#5 Хорошая поддержка IDE и отладка

Поддержка IDE является одной из самых важных вещей, когда вы пытаетесь поменять язык программирования. Удобная IDE в среднем может сохранить до 80% времени написания кода. Я нашел Go плагин для JetBrains IDEA, который поддерживает Webstorm, PHPStorm и др. Этот плагин дает вам все что нужно для разработки проекта, вдобавок к мощности JetBrains IDEA, что вместе дает вам хорошую прокачку в вашей работе.

Судя по статистике нашего кода, после того, как мы переписали наши проекты на Go, мы получили на 64% меньше кода, чем было раньше.

Вам не нужно заниматься отладкой кода, который не существует. Меньше кода — меньше проблем!

Заключение

Go стал для нас единым языком для всех случаев использования, который дал большую гибкость. Мы получили около 30% прироста производительности на бэкенде и сервисах API. И теперь мы можем обрабатывать логи в реальном времени, заносить их в базу данных и запустить потоки с Websocket с одного или нескольких сервисов! Это отличный результат от возможностей языка Go.

Добавить комментарий