Время на прочтение16 минКоличество просмотров42KGo, также известный как Golang, — это язык программирования с открытым исходным кодом. Представленный публике в 2009 году, Go был разработан для упрощения задач программирования и повышения эффективности. Он родился из потребности в языке, который был бы прост для понимания, эффективен для выполнения и прежде всего способен справиться с масштабами, в которых работает Google. Его отличают простота, эффективность, многопоточное программирование, кроссплатформенность и высокая скорость компиляции. Меня зовут Рафаэль Мустафин, я ментор на курсе «Go-разработчик» в Яндекс Практикуме. Я написал эту статью для новичков и тех, кто рассматривает Go в качестве первого языка программирования. В ней я приведу практические примеры того, что понимаю под преимуществами Go. Go популярен. С 2018 по 2020 год Go был самым популярным языком, который разработчики хотели бы добавить в свой стек. В то время как популярность такого языка, как Java, упала на 13%, популярность Go выросла на 125%. Спрос на Go-разработчиков со стороны работодателей вырос на 301%. По популярности он даже обогнал Swift и может ещё больше подняться в рейтинге. Всё это показано в исследовании: Такие компании, как Uber, Twitch, Dropbox и сам Google, а также Yandex, VK, Avito, Selectel, Ozon, внедрили Go в свой технологический стек, что ещё раз подтверждает его практичность и надёжность. Это уже не просто язык для работы с сетями и инфраструктурой, как предполагалось изначально. С момента своего появления Go превратился в язык общего назначения, используемый в широком спектре приложений, от разработки облачных вычислений и бэкендов до распределённых сетей. Кто использует Go? Компании, использующие Go, и для чего используется Go — Career KarmaКомпании, использующие Golang — Top 7 Popular Apps You Use Everyday [2023]30+ компаний, использующих Golang по областямХотя Go обладает впечатляющим набором возможностей и преимуществ, он не лишён недостатков. Но если знать, как он работает, эти недостатки можно нивелировать. В этой статье мы рассмотрим неоспоримые преимущества Go, а в следующей — его недостатки и способы их эффективного преодоления. ПростотаОдна из самых веских причин использовать Go — это его простота. Синтаксис языка Go чист и прост для понимания, что делает код очень читаемым и удобным для сопровождения. Создатели Go намеренно сделали язык небольшим и опустили некоторые функции, распространённые в других языках, такие как классы и исключения, чтобы сохранить простоту языка. Эта простота очевидна при сравнении кода на Go с кодом на других языках. Например, одна и та же функция, написанная на Python или C++, может быть значительно длиннее и сложнее, чем её аналог на Go. Давайте сравним простоту циклов в Go с циклами в других языках. В Go существует только одна конструкция циклов: for. Приведём несколько примеров её использования:Если традиционный цикл for совпадает с большинством языков:for i:= 0; i
#include
#include
#include
#include
#include
#include
namespace beast = boost::beast;
namespace http = beast::http;
namespace net = boost::asio;
using tcp = net::ip::tcp;
int main()
{
try
auto const address = net::ip::make_address(“0. 0. 0”);
auto const port = static_cast(std::atoi(“8080”));
net::io_context ioc{1};
tcp::acceptor acceptor{ioc, {address, port}};
for(;;)
tcp::socket socket{ioc};
acceptor. accept(socket);
http::request req;
beast::flat_buffer buffer;
http::read(socket, buffer, req);
http::response res{http::status::ok, req. version()};
res. body() = “Hello, World! “;
res. prepare_payload();
http::write(socket, res);}}
catch(std::exception const& e)
std::cerr
int main() {
int a; // Ошибки нет, хотя ‘a’ никогда не используется
printf(“Hello, world! \n”);
return 0;}В данном примере переменная “a” объявлена, но не используется. Это не приведёт к ошибке времени компиляции. Однако в зависимости от компилятора и флагов, используемых при компиляции, это может привести к появлению предупреждения. Например, если в GCC использовать флаг -Wall (который включает все предупреждения), то среди множества других будет выдано предупреждение следующего вида: warning: unused variable ‘a’ [-Wunused-variable]. Но кто же это включает по умолчанию? Как видите, строгость Go в отношении неиспользуемых переменных характерна не для всех языков и способствует повышению чистоты и сопровождаемости кода. Для сравнения давайте посмотрим на время компиляции различных языков. На изображении ниже, взятом с Imgur, представлено сравнение времени компиляции произвольного кода на C++, D, Go, Pascal и Rust. Сравнение времени компиляции произвольного кода на C++, D, Go, Pascal и Rust. Из графика видно, что скорость компиляции в Go значительно выше, чем во многих из этих языков, что ещё больше подчеркивает его эффективность. Эта особенность Go не только экономит время, но и способствует более комфортному и лёгкому кодированию, что стало основным фактором быстрого роста популярности Go. Другой нюанс заключается в том, что компиляторы Go не обязательно являются быстрыми. Скорее другие компиляторы медленные. Например, компиляторам С и С++ приходится разбирать большое количество заголовков, что отнимает много времени. В отличие от них Go избегает накладных расходов, и времени тратится меньше. Компиляторы Java и С# работают в виртуальной машине, что требует от операционной системы загрузки всей виртуальной машины и JIT-компиляции из байткода в нативный код. Это занимает время. Go избегает этих шагов — времени на компиляцию уходит меньше. Батарейки в комплекте: go run, go test, go build, go tool pprof и система модулейGo часто хвалят за его философию «батарейки в комплекте». Это означает, что язык поставляется с богатой стандартной библиотекой и встроенными инструментами, которые позволяют делать многое без необходимости полагаться на внешние пакеты или инструменты. Эта философия проявляется в таких командах, как go run, go test и go build, а также в системе модулей Go. Go Run, Go Test и Go BuildКоманды go run, go test и go build являются частью набора инструментов Go. Каждая из них служит для разных целей и облегчает разработку, тестирование и сборку программ на Go:go run: Эта команда компилирует и запускает программы Go. Это удобный способ быстро протестировать свой код без необходимости сначала вручную компилировать его, а затем запускать двоичный файл. Например, если у вас есть Go-программа в файле с именем main. go, вы можете протестировать её, просто выполнив команду go run main. go. go test: Эта команда запускает тесты для Go-программ. В Go есть встроенная система тестирования, и go test упрощает её использование. Она автоматически находит любые тесты в вашем коде и запускает их, предоставляя сводку результатов. go build: Эта команда компилирует программы на Go, создавая исполняемый двоичный файл. Она достаточно умна, чтобы перекомпилировать только те части вашей программы, которые изменились с момента последней сборки, что делает её эффективной. Полученный двоичный файл по умолчанию статичен, то есть он включает все свои зависимости и может быть запущен на любой системе, без необходимости установки дополнительных библиотек или инструментов. Встроенный профилировщикGo поставляется со встроенным профилировщиком, который позволяет разработчикам анализировать производительность своих программ и выявлять потенциальные “узкие места”. Профилирование является важным инструментом для понимания того, как программа использует ресурсы процессора и памяти, и помогает разработчикам оптимизировать свой код для повышения эффективности. Как использовать профилировщикДля использования профилировщика необходимо всего лишь импортировать соответствующие пакеты из стандартной библиотеки (net/http/pprof или runtime/pprof) и запустить HTTP-сервер для получения данных профилирования. Вот простой пример:package main
_ “net/http/pprof”
go func() {
// Запуск HTTP-сервера на localhost:6060
http. ListenAndServe(“localhost:6060”, nil)}()
// Ваш основной код программы находится здесь
//… }После запуска вашего приложения вы можете получить доступ к данным профилирования с помощью таких инструментов, как go tool pprof или веб-интерфейс pprof. Система модулей GoСистема модулей Go—- это ещё одна особенность, которая следует философии «батарейки в комплекте». Модуль Go — это набор связанных пакетов Go, которые версионируются как единое целое. Модули фиксируют точные требования к зависимостям и создают воспроизводимые сборки, упрощая управление версиями пакетов и путями импорта. Вместе эти функции и инструменты обеспечивают комплексную интегрированную среду разработки прямо из коробки. Они облегчают начало работы с Go, обеспечивают качество кода и управление зависимостями, способствуя репутации Go как продуктивного языка как для небольших сценариев, так и для больших систем. ЗаключениеВ заключение следует отметить, что язык программирования Go обладает целым рядом достоинств, которые способствовали заметному росту его популярности. Простота, эффективность и мощная модель параллелизма делают его отличным выбором для широкого круга приложений. От веб-разработки до системного программирования — Go зарекомендовал себя как универсальный и надёжный язык. Кроме того, ориентация на обратную совместимость обеспечивает сохранение актуальности и сопровождаемости кода на языке Go с течением времени. В результате Go — это язык, который позволяет разработчикам создавать масштабируемые и высокопроизводительные приложения. В быстро развивающемся мире разработки программного обеспечения язык Go является оптимальным выбором для проектов любого масштаба и сложности. Прагматичный подход, поддерживаемый развивающейся экосистемой и сообществом энтузиастов, укрепляет позиции Go как мощного и перспективного языка, заслуживающего внимания при разработке современного программного обеспечения. Поскольку разработчики продолжают искать эффективные и производительные инструменты, сильные стороны Go делают его привлекательным и жизнеспособным вариантом, выдвигая его в число ведущих языков программирования в современную эпоху цифровых технологий. Однако Go не лишён своих ограничений. Отсутствие генериков и более развитой системы управления зависимостями может создавать проблемы в некоторых случаях. Несмотря на эти недостатки, активное сообщество разработчиков Go и их стремление к постоянному совершенствованию позволяют находить решения и обходные пути. В следующей статье я разберу типичные проблемы с Go и варианты их решения. Научиться писать сложные приложения на Go и освоить архитектурные паттерны можно на курсе «Go-разработчик» в Яндекс Практикуме. В этом вас поддержат опытные код-ревьюеры и менторы. Студенты могут выбрать подходящий им формат обучения: в классических группах до 15 человек или в своём темпе без дедлайнов и спринтов.
Category: [casino]1go-raw
1go-источник-сайт