Что написать на golang для практики
Пишем первый проект на Golang
Пару месяцев назад я начал писать на Go так же известным, как Golang. И не только из-за их потрясающего логотипа. Основная причина была в том, что я хотел, чистую железяку на моем Raspberry Pi, а так же кроссплатформенность в паре с легкостью установки. Среди других причин были простота создания на Go асинхронного кода с помощью Go методов и уникальный подход к синхронизации каналов между подпрограммами (потоками) посредствам go routines.
С тех пор, как GO был выпущен в 2012 году, я много читал о нем и что ж, пришло время по-настоящему замарать руки и попробовать использовать его для своих задач.
Что же из себя представляет GO?
Необходимые настройки среды
Для начала нужно все правильно настроить. Есть простой способ установить мою библиотеку с помощью Chocolatey.
В Windows мы используем Chocolatey в Powershell для установки Go и vscode…
С установленным Go и vscode у нас есть все, что нужно для начала.
Так как я использую Git bash на все случаи жизни, я запускаю следующую команду Visual Studio Code из Git Bash, чтобы установить go расширение. Если хотите, вы можете просто установить расширение из самого vscode.
Вот мы и поставили Go расширение в visualstudio, так что теперь у нас есть все для приятного кодинга.
Где найти отличные ресурсы и материалы по GO?
Документацию по Go можно найти здесь. Все пакеты, доступные для использования, можно найти здесь.Кроме того, для того, чтобы заюзать Go или помочь другим программистам с примерами у языка есть онлайн-площадка.
Создаем первый проект
Для того, чтобы начать на Go новый проект, мы сначала создаем пустую папку. Затем мы прописываем в этой папке команду go modules init, чтобы инициализировать модули Go. Модули используются для зависимостей.
Синтаксис
В Go мы определяем функцию, используя ключевое слово func.
То, что других языках обычно бывает классом, в Go является структурой struct. Вы можете определить структуру следующим образом.
Все переменные, функции, структуры, которые начинаются с верхнего регистра в Go являются публичными. А все переменные, функции, структуры, начинающиеся со строчной буквы, являются частными. Кроме того, как вы наверное уже заметили в примере, определения типов идут за именем переменной. Поместив оператор импорта поверх файла вы можете импортировать все необходимые пакеты. И последнее, но не менее важное: каждая программа go должна иметь хотя бы один main пакет.
Этот пакет fmt предоставляет нам несколько полезных функций, например строки шаблонов, которые удобно использовать для построения строки с использованием некоторых переменных.. Более того, в примере мы видим, что возвращаемый тип для функции упоминается в конце ее определения. Более подробно читайте о пакете fmt в документации.
Вперед, в бой!
Теперь у нас есть пустой проект, и к тому же мы уже немного знаем о синтаксисе, чтож, начнем! Открываем эту папку в vscode.
Теперь с помощью этого кода мы можем запустить наше приложение. Используя следующую команду в командной строке.
Можете также прогнать этот код в Go playground.
Тестирование
Чтобы добавить тесты в go, просто добавьте файл main_test.go. Добавим функцию проверяющую метод sayHi. Сигнатура методов тестирования всегда ДОЛЖНА быть TestXxx(t *testing.T). Первый X всегда должен быть в верхнем регистре.
Вы наверняка заметили что то новое в этом коде. Мы используем сокращение для присвоения значений переменной: =. Если функция sayHi не возвращает ожидаемое нами значение, мы выдадим ошибку с хорошим понятным сообщением.
Пожалуйста, не бойтесь пробовать, изменяйте реализацию, и снова запустите тест, чтобы увидеть, как тесты пройдут неудачно. Для запуска с code coverage запустите такие тесты.
Чтобы подробнее ознакомится, пожалуйста, читайте документацию о testing package.
Компилируем и выполняем
Самым простым способом создать исполняемый файл будет:
Raspberry Pi 3 имеет архитектуру ARM v7, которую можно скомпилировать следующим образом. ПРИМЕЧАНИЕ: все это мы можем сделать с Windows.
Резюмируя
Я знаю, что это очень простое приложение и оно не несет практической пользы, но, по крайней мере, вы уже, как минимум, настроили свою среду разработки и приобрели небольшой практический опыт в написании первых строк кода на Go. Вы уже также знаете, как писать тесты. Это будет хорошей основой для написания качественного кода. Более интересные вещи, такие как go routines, я хотел бы оставить для нового поста в блоге.
И последнее, но не менее важное: я хотел бы поделиться с вами своим первым приложением на Go. Это интеграция с термостатом Nest, который я запускаю на своем Raspberry Pi, чтобы собрать данные о температуре и отобразить их в хорошем веб-приложении на React. Только не забудьте зарегистрироваться в рабочем пространстве Gophers Slack.
Популярные задачи для собеседований бэкенд-разработчиков на Go и их решения
Я живу в Ташкенте, и когда учился в университете — начал учить Python, чтобы писать ботов. Боты — это узбекский хлеб, у нас на них построено вообще все. Например, никто не делает приложения для заказа еды, все только в мессенджерах.
Я учил язык по статьям из интернета — просто брал каркас и дальше дописывал, смотрел, где что падает, постоянно решал задачи на leetcode. Писал я тогда ужасно, но что было, то было. Мне нравилось, но чем больше я углублялся, тем сильнее раздражали скорость выполнения, ограничения параллелизма и динамическая типизация.
Тогда я решил попробовать Go.
Go — простой, классный и востребованный
Меня привлекла их идея легковесной конкурентности и понравилось то, что не нужно разбираться в зоопарке асинхронности, который был в питоне. Сначала я писал на Go что-то для себя, смотрел как себя ведет язык. Потом на работе мы решили попробовать один несложный проект. Получили хорошие результаты — и по скорости разработки, и по скорости выполнения.
Возможно, Go не такой выразительный, возможно, там есть спорные решения — например, пустые интерфейсы, которые клали на всю вашу типизацию, или пакет рефлект, в который лучше не заглядывать. Но в целом, обычный продакшн код на Go и правда читабелен, это один из немногих языков, где ты можешь нырнуть почти в любую библиотеку и понять, что там происходит хотя бы на механическом уровне без погружения в доменную область.
Как говорил Роб Пайк: «Простота — это сложно». Философия, все дела. Кто-то ругает голанг за излишнюю простоту, а мне она нравится.
Я быстро освоил синтаксис и начал писать на нем какие-то простые вещи. В то время мне нравилось ходить на собесы и смотреть, что спрашивают — хотя я еще не особо познакомился со стандартной библиотекой и экосистемой языка.
Один раз я полуслучайно угодил на синьорское собеседование. Это было самое душное из всех интервью, что я видел. Было ощущение, что интервьюера заставили прийти и слушать меня. Он сразу начал с технических вопросов, и я понял, что он просто задает вопросы из статьи с хабра — причем идет по ним подряд, как будто за 15 минут до встречи погуглил «Вопросы для собеседования бэкенд-разработчика».
Эйчары написали мне через месяц и сказали, что уже готовят оффер. Потом написали еще через час и сказали, что, к сожалению, иностранцев они уже не берут.
Слава богу, на подобное я больше не натыкался. Опыт и знания копились, вакансий на Go становилось относительно много, причем адекватных — на бэкенд хайлоад системы с микросервисами, а не только в криптовалютные стартапы.
Я считаю, что самые адекватные способы понять, хорош ли разраб — давать ему задачи и разбирать код. На работе, которую я в итоге получил, было именно так. Здесь я собрал несколько самых популярных задач, которые часто попадаются на собесах и написал, как бы я стал их решать.
Популярные задачи на собеседованиях
На вход подаются два неупорядоченных слайса любой длины. Надо написать функцию, которая возвращает их пересечение
Стандартная задача с leetcode и ее довольно часто спрашивают на собеседованиях в качестве простой задачи для разогрева.
Можно решить сортировкой, за более долгое время, но без выделения дополнительной памяти. А можно выделить дополнительную память и решить за линейное время.
Надо посчитать количество появлений элементов первого массива (лучше брать тот, что покороче) — используем для этого словарь. Потом пройтись по второму массиву и вычитать из словаря те элементы, которые есть в нем. По ходу добавляем в результат те элементы, у которых частота появлений больше нуля.
Решение
Написать генератор случайных чисел
В принципе, легкая задача, на базовые знания по асинхронному взаимодействию в Go. Для решения я бы использовал небуфферезированный канал. Будем асинхронно писать туда случайные числа и закроем его, когда закончим писать.
Плюс ее можно использовать в немного измененном виде в задаче на слияние N каналов.
Решение
Слить N каналов в один
Даны n каналов типа chan int. Надо написать функцию, которая смерджит все данные из этих каналов в один и вернет его.
Мы хотим, чтобы результат работы функции выглядел примерно так:
for num := range joinChannels(a, b, c) <
Для этого напишем функцию, которая будет асинхронно читать из исходных каналов, которые ей передадут в качестве аргументов, и писать в результирующий канал, который вернется из функции.
Создаем канал, куда будем сливать все данные. Он будет небуферезированный, потому что мы не знаем, сколько данных придет из каналов.
Дальше асинхронно прочитаем из исходных каналов и закроем результирующий канал для мерджа, когда все чтение закончится. Чтобы дождаться конца чтения, просто обернем этот цикл по каналам в wait group.
Решение
Сделать конвейер чисел
Даны два канала. В первый пишутся числа. Нужно, чтобы числа читались из первого по мере поступления, что-то с ними происходило (допустим, возводились в квадрат) и результат записывался во второй канал.
Довольно частая задача, более подробно можно почитать тут https://blog.golang.org/pipelines.
Решается довольно прямолинейно — запускаем две горутины. В одной пишем в первый канал. Во второй читаем из первого канала и пишем во второй. Главное — не забыть закрыть каналы, чтобы ничего нигде не заблокировалось.
Решение
Написать WorkerPool с заданной функцией
Довольно распространенная задача, плюс подобные задачи встречаются на практике.
Нам нужно разбить процессы на несколько горутин — при этом не создавать новую горутину каждый раз, а просто переиспользовать уже имеющиеся. Для этого создадим канал с джобами и результирующий канал. Для каждого воркера создадим горутину, который будет ждать новую джобу, применять к ней заданную функцию и пулять ответ в результирующий канал.
Решение
Сделать кастомную waitGroup на семафоре
Семафор можно легко получить из канала. Чтоб не аллоцировать лишние данные, будем складывать туда пустые структуры.
В нашем случае мы хотим сделать семафор, который будет ждать выполнения пяти горутин. Для этого просто добавим вместо обычного канала буфферизированный. И внутри каждой горутины положим в него значение. А в конце будем дожидаться, что все ок — мы вычитаем все значения из канала.
Решение
В общем, если понравились задачи и показались полезными — заходите в канал Rebrain — там часто выкладывают бесплатные вебинары и практикумы по Go. Потом можно обсуждать кто, что и как делает в сообществе.
Мысли о будущем Go
Я думаю, сейчас нет никаких проблем, что Go обзывают языком для новичков. Условный питон преподают детям в школе — это только говорит о доступности языка, что нормально. Язык программирования — это инструмент и если он из коробки, как есть понятен большинству, что в этом плохого.
Никто не ругает топор, за то что он такой топорный, да и вообще он не бензопила.
Go четко обозначен — простой инструмент для простых задач, подходит или для маленьких приложений, или для маленьких микросервисов, которые образуют большое приложение.
Но сейчас на Go все чаще пишут гигантские системы. Наделали фреймворков (само по себе понятие «фреймворк» — противоречит идее Go), разработали инструменты, чтобы затащить его на фронтенды, адаптировать к разработке огромных приложений, стали делать на нем все, что не приколочено. Начали требовать серьезного развития языка в сторону усложнения — чтобы было как в Java и C#. Чтобы у нас, значит, тоже получалось пилить грандиозные монолитные бэкенды, обмазывать всё тоннами декораторов, писать универсальный, сверхпереиспользуемый код и все такое.
Посмотрите на С++. Чтобы угодить потребностям всех разработчиков на плюсах, язык набили фичами настолько, что всерьез вот сесть и выучить С++ невозможно. А уж выбрать его в качестве инструмента для разработки, когда есть альтернативы — абсолютно исключено.
Go стал очень популярным. Мой прогноз — через несколько лет они напичкают его всеми концепциями, которыми только смогут, и будут писать на нем все возможные виды софта. И тогда где-то какой-то парень возьмет, и снова изобретет новый простой инструмент для простых задач.
Автор статьи — @alisher_m, участник сообщества Rebrain. Подписывайтесь, если хотите тоже поделиться опытом и поспрашивать советов. Там регулярно разбираем все эти темы и многие другие, которые пригодятся и на собеседовании, и в работе.
Из техпода в программисты (или Golang для самых маленьких)
Доброго времени суток, Хабровчане!
Предисловие
Мне 26 лет, 5.5 лет проработал в технической поддержке и окончательно выгорел. Решил заниматься тем, что меня действительно воодушевляет и от чего испытываю удовольствие.
Данный цикл статей предназначен в первую очередь для себя самого чтобы быстрее усвоить материал, а также для новичков в программировании которые как и я хотят освоить язык и заниматься интересными проектами.
На своём жизненном пути я уже знакомился с HTML, CSS и его препроцессорами, Javascript, PHP, SQL, немного Python, C#, Java. Даже реализовал несколько веб проектов, решил некоторые рабочие задачи, но меня постоянно что-то не устраивало. Я хотел найти “идеальный” для себя язык с которым мне было бы приятно работать и наткнулся на Golang.
Почему именно Golang? Go понравился мне по нескольким причинам.
“Из коробки” имеет многопоточность
Сборщик мусора о котором нет необходимости задумываться
Развивается как open source проект
Что рассмотрим в этой статье
Что нужно для работы с Go
Основные типы данных
Условные выражения и условные конструкции
Что нужно для работы с Go
Для написания кода можно использовать специальные интегрированные среды разработки (IDE), которые поддерживают Go.
Самая многофункциональная IDE представлена компанией JetBrains и называется она GoLand, но не спешите её устанавливать. Есть ряд причин почему нет необходимости в таком большом инструменте.
для знакомства с языком и написания своих первых пет-проектов хватит и инструментов описанных ниже
Другие инструменты для разработки на Go:
Visual Studio Code + плагин для разработки на Go
Atom + плагин для разработки на Go
Sublime Text + плагин для разработки на Go
Существуют и другие IDE у которых есть плагины для Go например: Intellij IDEA, Netbeans. Но не думаю что стоит заострять на них внимание т.к. это достаточно большие IDE с обширным функционалом и новичок в них очень легко запутается.
Также можно программировать на Go прямо из браузера не устанавливая ничего на своё устройство.
Переменные
В Go имя переменной может быть произвольным и может состоять из алфавитных и цифровых символов, а также символа подчеркивания. При этом при объявлении переменной первый символ должен быть либо алфавитный символ, либо символ подчеркивания. Важно, что имена переменных не могут быть такими же как зарезервированные в Go кодовые слова: break, case, chan, const, continue, default, defer, else, fallthrough, for, func, go, goto, if, import, interface, map, package, range, return, select, struct, switch, type, var.
Самое простое определение переменной:
Эта переменная называется hello и представляет строковый тип данных string.
Можно одновременно объявить несколько переменных через запятую:
В этом случае объявлены переменные a, b и c которые имеют тип данных string. В конце также указывается тип данных и все переменные ему принадлежат.
Одновременно с объявлением переменной ей можно присвоить какое-то значение:
Такой прием называется инициализацией
Неявная типизация
При объявлении переменной можно не указывать её тип, если происходит явная инициализация переменной значением.
Так же можно объявить переменную сокращенным способом:
Такой способ эквивалентен предыдущему.
Если объявить переменную без указания типа и начального значения, это будет ошибкой.
Поэтому необходимо либо указать тип, либо начальное значение, либо и то и другое
Так же можно объявить несколько переменных
Основные типы данных
Стандартное значение для всех числовых типов = 0
Целочисленные типы
Тип с плавающей точкой
Они же десятичные дроби.
Комплексные типы
В Go присутствуют комплексные типы данных. На практике они имеют не очень большую популярность.
Подробнее про комплексные числа можете прочитать здесь
Логический тип
Строковый тип
Помимо обычных символов строка может содержать в себе специальные символы
Константы
Константы как и переменные хранят в себе некоторые данные, но в отличие от переменных их значения невозможно изменить т.к. они устанавливаются только один раз.
Для определения константы используется ключевое слово const.
Если мы попробуем изменить значение константы, то получим ошибку.
В одном представлении можно объявить сразу несколько констант
Если у константы не указан тип, то он выводится неявно в зависимости от того значения каким инициализируется константа
Также константам обязательно необходимо присваивать значения при объявлении.
Такое объявление констант недопустимо, потому что они не инициализируются.
Если определяется последовательность констант, то инициализацию значений можно опустить для всех констант кроме первой. В этом случае константа без значения получит его от предыдущей константы:
Важно, константы можно инициализировать только константными значениями, например числами, строками или значениями других констант. Но инициализировать константу значениями переменной нельзя:
Арифметические операции
У переменных есть разные операции, как в алгебре.
+ сложение
— вычитание
* умножение
/ деление
При делении необходимо быть внимательным! Если в операции два целых числа, то результат деления будет округляться до целого числа даже если результат деления присваивается переменной типа float32/float64:
Чтобы получить в результате деления вещественное число, хотя бы один из операндов должен быть вещественным числом:
% (деление по модулю) возвращает остаток от деления. В этой операции могут быть использованы только целые числа:
Постфиксный инкремент (x++). Увеличивает значение переменной на единицу:
Постфиксный декремент (x—). Уменьшает значение переменной на единицу:
Комментарии
Программа может содержать в себе комментарии. Комментарии необходимы для описания действий которые производит программа или какие-то её части. При компиляции программы комментарии не учитываются и не оказывают никакого влияния на работы программы. Комментарии бывают однострочными и многострочными.
Однострочный комментарий пишется в одну строку после двойного слеша (//), многострочный комментарий может заключаться между символами /* и */ и занимать несколько строк:
Ввод/вывод данных
Работать с переменными конечно интересно, но намного интереснее работать с ними и видеть как их значения выводятся через консоль. Для того чтобы это сделать, необходимо воспользоваться методом Scan из стандартного пакета Go под названием fmt, например:
Если проще, то введённое число или слово в консоль, запишется в эту переменную и будет в ней храниться пока не понадобится изменить значение переменной.
Теперь можно прочитать например, имя и возраст. Для начала создадим файл в любом удобном для вас месте на вашем компьютере. В моём случае это файл main.go расположенный по пути E:\main.go и содержит в себе следующий код:
В моем коде используется форматированный вывод, об этом способе вывода информации я подробнее напишу в следующих статьях. Но для особо любопытных, можете почитать вот здесь.
Далее чтобы увидеть работу этого кода и поиграть с ним, необходимо запустить командную строку или терминал. Например: Git Bash, встроенный терминал LiteIDE. Если пользуетесь этой IDE как я, терминал можно запустить сочетанием клавиш Ctrl+Shift+4. Итак, вводим заветную команду go run main.go и нажимаем Enter.
После консоль просит нас по очереди ввести имя и возраст. Когда программа получает эту информацию, выводится строка “Человеку по имени Авдей, 99 лет.” и программа завершает свою работу.
Условные выражения и условные конструкции
Операции отношения позволяют сравнивать два значения. В Go есть следующие операции отношения:
== Операция “равно”, возвращает true, если оба операнда равны или false если они не равны.
> Операция “больше чем”, возвращает true, если первый операнд больше второго, и false если первый операнд меньше второго, либо оба операнда равны.
= Операция “больше или равно”, возвращает true, если первый операнд больше второго или равен второму, и false если первый операнд меньше второго.
Заключение
В заключении статьи хотелось бы поделиться полезными ссылками:
50 оттенков Go. Очень полезная статья, спасибо VK Team за перевод оригинала
Для тех кто любит проходить различные курсы:
Программирование на Golang (курс составлен неплохо, но полные новички возможно испытают некоторые сложности из-за того, что нельзя посмотреть какими тестами облагаются задания)
Ресурсы с заданиями для практики:
Exercism. Имеется множество заданий различной сложности. Можно быть как студентом, так и ментором.
Спасибо за внимание. До новых встреч! Комментарии в студию 🙂
Golang: основы для начинающих
Авторизуйтесь
Golang: основы для начинающих
Golang, или Go — язык программирования, начало которого было положено в 2007 году сотрудниками компании Google. В этом руководстве по Golang мы рассмотрим, как установить необходимое ПО и написать свою первую программу.
Go поддерживает типобезопасность, возможность динамического ввода данных, а также содержит богатую стандартную библиотеку функций и встроенные типы данных вроде массивов с динамическим размером и ассоциативных массивов.
С помощью механизмов многопоточности Go упрощает распределение вычислений и сетевого взаимодействия, а современные типы данных открывают программисту мир гибкого и модульного кода. Программа быстро компилируется, при этом есть сборщик мусора и поддерживается рефлексия.
Это быстрый, статически типизированный, компилируемый язык, при использовании которого создается впечатление использования динамически типизированного и интерпретируемого языка.
Примечание Вы читаете улучшенную версию некогда выпущенной нами статьи.
Настройка окружения
Для начала скачаем 64-битную версию Go c официального сайта. В зависимости от используемой операционной системы выполняем следующие действия.
UNIX / Linux / MacOS / FreeBSD
Добавляем папку /usr/local/go/bin в переменную окружения PATH :
Windows
Чтобы изменения вступили в силу, перезапустим все открытые окна эмуляторов терминала.
Проверяем корректность установки, создав и выполнив файл C:\Projects\Go\test.go :
Выполним этот код и получим следующий результат:
Синтаксис
Пакеты
Импорт
Импорт пакетов можно описать двумя способами.
Функции
Общая форма определения функции выглядит следующим образом:
Количество и тип входных аргументов может быть любым. Для примера опишем функцию add с двумя входными параметрами формата int :
Выполним этот код и получим следующий результат:
Переменные
Определение переменной в Go означает передачу компилятору информации о типе данных, а так же о месте и объёме хранилища, которое создаётся для этой переменной. Определять переменные одного типа можно по одному и списком. Общая форма такая:
С помощью оператора var определяем перечень переменных, причём тип данных указываем в конце выражения.
Объявление возможно как на уровне пакета, так и на уровне функции. Рассмотрим пример:
Выполним этот код и получим следующий результат:
Оператор цикла
Общая форма цикла выглядит так:
При инициализации кратко объявляются переменные, которые доступны только в пределах цикла.
Примечание В отличие от таких языков, как C, Java и JavaScript, перечисленные выражения цикла не выделяются скобками. В данном случае обязательны лишь фигурные скобки, обрамляющие тело цикла.
Рассмотрим пример программы:
Выполним этот код и получим следующий результат:
Условный оператор
Форма определения условного оператора в Go выглядит следующим образом:
Если выражение в поле условия истинно, код, размещённый между фигурными скобками, выполнится.
Условие описывается значением, переменной или выражением. Например:
Рассмотрим пример программы:
Выполним этот код и получим следующий результат:
Массивы
Язык программирования Go также поддерживает массивы, которые представляют из себя структуру данных фиксированного размера, состоящую из элементов одного типа. Массивы используются для хранения наборов данных, но полезно подразумевать под ними коллекцию переменных одного типа.
Чтобы объявить массив, необходимо указать тип и требуемое количество элементов следующим образом:
Если значения элементов известны, для определения массива допустимо использовать следующую конструкцию:
Длина массива не изменяется, потому что является частью типа данных. Это кажется ограниченным решением, но не волнуйтесь: в Go реализована комфортная работа с массивами.
Рассмотрим пример программы:
Выполним этот код и получим следующий результат:
Срезы
Срезы (Slices) в Go — абстракция над массивами. Хотя встроенных способов увеличить размер массива динамически или сделать вложенный массив в Go нет, срезы убирают это ограничение. Они предоставляют полезные функции и широко используются программистами.
Объявить срез можно как массив, но без указания размера или с помощью функции make :
Размер массива фиксирован, а у среза изменяемый. По сути, срез — более общий вид массива.
Рассмотрим пример программы:
Выполним этот код и получим следующий результат:
Структуры
Struct определяет тип данных, которому соответствует два и более элементов.
Type связывает заданное имя с описанием структуры.
Форма описания выглядит следующим образом:
Как только структура типа определена, он может использоваться при объявлении новых переменных:
Чтобы получить доступ к элементам структуры, используем оператор доступа к элементу. Рассмотрим на примере:
Выполним этот код и получим следующий результат:
Чем Golang хорош для начинающих?
Концепция языка Golang разработана на основе опыта решения повседневных задач и не преследует цель сделать прорыв в программировании. Кроме того, Go не реализует ряд функций, которые делают другие языки (C++, Java и Python) настолько мощными. Но есть три причины, чтобы задуматься об использовании этого языка.
Читабельность
Как только привык к синтаксису Go, прочесть чужой код — тривиальная задача.
У каждого человека собственный «правильный» способ делать вещи, поэтому Go навязывает свой стиль программирования. В результате вопросы вроде использования или неиспользования фигурных скобок отпадают, и остаётся только писать код по заданным правилам. Поэтому Golang подходит для начинающих.
Скорость
За короткий промежуток времени можно написать быструю программу.
Производительность работы пакета на Go, возможно, будет меньше, чем при использовании С, зато скорость компиляции для больших программ будет выше. Для большинства проектов — приемлемый компромисс, причём при необходимости достаточно просто переписать код на языке Go.
Меньше ошибок
Большинство ошибок возникают в непроверенном или сложном коде.
Go предоставляет удобные средства для тестирования. Кроме того, строгая типизация устраняет ошибки вроде случайного сравнения количества яблок с количеством груш, которые определяются ещё на этапе компиляции.
Заключение
Если хотите погрузиться глубже в изучение, посмотрите нашу подборку бесплатных книг по знакомству с языком программирования Go, а главное — начните создавать маленькие программы, чтобы на практике понять тонкости языка. Удачи!