Обновить
18
0

Разработчик

Отправить сообщение

Go 1.25: свежий релиз принес умные контейнеры и экспериментальный сборщик мусора

Время на прочтение3 мин
Охват и читатели9.1K

12 августа команда Go представила новую версию языка — Go 1.25. Релиз получился не самым крупным по количеству изменений в языке (их вообще нет), но принес несколько интересных улучшений в рантайме и инструментах, которые стоит обсудить.

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

Читать далее

Каналы (channels) в Go

Время на прочтение15 мин
Охват и читатели5.3K

Каналы — инструмент для передачи данных между горутинами. Это фундаментальная концепция, на которой строится вся модель параллелизма в языке, и одна из ключевых особенностей, которая делает Go уникальным среди современных языков программирования. За внешней простотой синтаксиса ch <- value и <-ch скрывается сложная реализация, которая включает в себя кольцевые буферы, системы очередей, механизмы блокировки и тесную интеграцию с планировщиком горутин. В этой статье разберем их внутреннее устройство на уровне runtime и рассмотрим паттерны использования.

Читать далее

Обработка ошибок в Go

Время на прочтение14 мин
Охват и читатели3.2K

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

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

Читать далее

Функции и методы в Go

Уровень сложностиСредний
Время на прочтение4 мин
Охват и читатели3K

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

Читать далее

Строки(strings) в Go

Время на прочтение4 мин
Охват и читатели6.2K

Строки — одна из самых часто используемых структур данных в любом языке программирования. И в Go они повсюду: от простых приветствий вроде "Hello, World!" до сложных парсеров, логгеров и сетевых протоколов. На первый взгляд, с ними всё просто: создал, склеил, обрезал — и пошёл дальше. Но как это часто бывает, под простотой скрываются тонкости, игнорирование которых может привести к ошибкам и снижению производительности.

Go предлагает удобные, но специфичные механизмы работы со строками. Они тесно связаны с понятиями Unicode, UTF-8, рун, неизменяемости и байтовых представлений. Понимание этих механизмов позволяет не только избежать типичных подводных камней, но и писать более эффективный код.

Читать далее

Терминал Warp

Время на прочтение4 мин
Охват и читатели10K

Warp — это современный терминал для macOS, Linux и Windows, который переосмысливает работу с командной строкой. Позиционируясь как "терминал для 21-го века", работает на базе искусственного интеллекта. В этой статье я расскажу, почему я решил попробовать Warp, какие есть возможности, и как, возможно, он может помочь разработчикам повысить продуктивность.

Читать далее

Карты (maps) в Go

Время на прочтение6 мин
Охват и читатели4.4K

Карты (maps) в Go — это отличный инструмент для хранения данных в виде пар «ключ — значение». Они широко используются в разработке благодаря своей гибкости и удобству. Например, карты часто применяются для кэширования данных, хранения конфигураций или обработки больших объемов информации. Однако эффективная работа с картами требует понимания их внутреннего устройства и особенностей управления памятью. Под капотом карты реализованы на основе хеш-таблиц, что обеспечивает быстрый доступ к данным, но также создает потенциальные проблемы, такие как неэффективное использование памяти или утечки. В этой статье мы разберем устройство карт в Go, рассмотрим, как они растут и работают, а также обсудим способы оптимизации их использования. Особое внимание уделено проблемам, связанным с инициализацией карт и управлением памяти, чтобы помочь вам писать более эффективный и надежный код.

Читать далее

Срезы(slices) в Go

Время на прочтение15 мин
Охват и читатели6.8K

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

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

Читать далее

Пишем Telegram-бота на Go(и заставляем его мотивировать нас каждые 30 минут)

Время на прочтение9 мин
Охват и читатели19K

Давно уже было желание сделать что-то простое и полезное в Telegram, но чтобы не пришлось постоянно за этим следить. И вот пришла гениальная идея: чтобы быть всегда замотивированным, можно написать бота, который будет (с какой то периодичностью) сам отправлять мотивационные цитаты в канал?

Этот бот берёт случайные цитаты известных людей из интернета, переводит их на русский язык и отправляет в Telegram-канал по расписанию. Например, утром, днём, вечером и ночью. Звучит просто, правда? Но внутри этого проекта есть всё, что нужно для обучения: чистая архитектура, работа с API, планировщик задач и даже деплой на облачную платформу Railway.

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

Что в итоге получилось и код проекта можно найти по этим ссылкам.

Telegram-канал который получился

Проект на GitHub

Читать далее

Конкуренция в Go

Время на прочтение12 мин
Охват и читатели4.9K

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

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

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

Читать далее

Планировщик Go

Время на прочтение15 мин
Охват и читатели2.1K

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

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

Читать далее

Планировщик ОС

Время на прочтение9 мин
Охват и читатели2.1K

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

В этой статье я решил разобраться с основными механизмами и принципами работы планировщик ОС. Большая часть статьи перевод «Scheduling In Go: Part I — OS Scheduler»,  автора Билла Кеннеди.

Читать далее

HTTP-сервер на Go

Уровень сложностиПростой
Время на прочтение5 мин
Охват и читатели12K

HTTP-сервер на языке программирования Go. Начнём с HTTP-протокола, рассмотрим основные концепции создания сервера, далее напишем практический пример.

Читать далее

Транспортный уровень: TCP И UDP

Время на прочтение7 мин
Охват и читатели8.7K

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

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

Читать далее

Обработка ошибок в Go — Не традиционный подход

Время на прочтение2 мин
Охват и читатели2.3K

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

Читать далее

Сравнение кода DeepSeek и ChatGPT(Golang)

Время на прочтение9 мин
Охват и читатели20K

Весь этот шум заставил меня заинтресоваться DeepSeek. Самое банально сравнить с ChatGPT. Ну и плюсом у меня сегодня выходной, можно и поиграть немного. Код конечно на Go. Модели GPT-o1 и Deepseek-R1.

Читать далее

Язык программирования Go – для начинающих

Время на прочтение10 мин
Охват и читатели33K

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

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

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

Читать далее

Модель OSI

Уровень сложностиПростой
Время на прочтение6 мин
Охват и читатели21K

В этой статье вы узнаете об основных понятиях модели Open Systems Interconnections (OSI) в простой и доступной форме.

Многие, вероятно, знают основы того, что такое интернет и как он работает. Есть клиент и сервер, и они «общаются» друг с другом с помощью чего-то, называемого HTTP или HTTPS?

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

Читать далее

Рекурсия

Уровень сложностиПростой
Время на прочтение7 мин
Охват и читатели2.5K

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

Что такое рекурсия?

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

Читать далее

Benchmark — тесты в Go

Время на прочтение6 мин
Охват и читатели2.9K

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

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

Давайте начнём

Читать далее
1

Информация

В рейтинге
Не участвует
Зарегистрирован
Активность

Специализация

Бэкенд разработчик
Старший
Ведение переговоров