Как стать автором
Обновить
374.25

Go *

Компилируемый, многопоточный язык программирования

Сначала показывать
Порог рейтинга
Уровень сложности

Люблю я http, и вот как я его готовлю

Уровень сложностиСредний
Время на прочтение19 мин
Количество просмотров2.2K

Я старый фуллстек-разработчик и не знаю слов любви, но около полугода назад при очередной итерации сервера почувствовал себя утомленным путником, который узрел нежную красоту wr-обработчика нативного net/http! Вот раньше всё было ужасно - а теперь красиво, приятно читать и интересно показать! За несколько месяцев я переделал свои сотни обработчиков на новый стиль - и всё еще доволен! Почистил авгиевы конюшни слоев логики - теперь там царит запах фиалок! Также у меня была возможность посмотреть как пилят http профессионалы бэкенда - далеко не как фуллстеки, о чем тоже хочется рассказать!
Для ленивых читать - пора вернуть логику в обработчики! Но я расскажу подробно о той красоте, которая скрывается за этими многими восклицательными знаками, и о том, как её можно испортить. Структура такова:
- сначала чем фуллстек отличается от нативного бэкенда,
- потом пройдемся по API-стилю а-ля РЕСТ,
- прочтем оду нативному http-модулю, расковыряем пару болячек фреймворков,
- почитаем мои слова, почему wr-обработчик хорош сразу из коробки,
- и посмотрим пример того, как превратить обработчик в простой вид "задача-дано-решение-ответ".

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

Читать далее

Новости

Пробуем Codex CLI от OpenAI для доработки ХрюХрюКара

Уровень сложностиПростой
Время на прочтение4 мин
Количество просмотров808

Пару дней назад я опубликовал статью про ХрюХрюКар - телегам-бот для борьбы со стоянкой автомобилей на зелёных зонах. Проект с открытым исходным кодом.

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

Основные серверы ХХК уже имели сторы, которые получают и обрабатывают апдейты, прилетающие через redis.

По сути, оставалось внести правки в часть django-бэкенда, чтобы обрабатывать сигналы pre_save и pre_delete, сериализовать данные и отправлять их в нужный канал редиса.

Решил поручить эту задачу Codex CLI, которую вчера OpenAI представили нам с вами. 

Читать далее

100 % cover, 0 % спокойствия

Уровень сложностиПростой
Время на прочтение8 мин
Количество просмотров964

Привет, Хабр!

Сегодня я хочу поговорить о том, как мы все иногда очарованы показателями тестового покрытия в Go — и как же часто эти проценты лукаво нам подмигивают. Казалось бы, влепили go test -cover, получили любимые цифры, приближающиеся к 100%, и можно выдохнуть. Но, увы, не всё так радужно, как хочется. На самом деле заветная сотка покрытия далеко не всегда означает, что ваш код действительно покрыт тестами.

Читать далее

Разработка CLI с помощью пакета Cobra: как не наступить на змею при написании

Уровень сложностиСредний
Время на прочтение6 мин
Количество просмотров740

Привет, Хабр. Меня зовут Иван Добряев, я разработчик программного обеспечения в Центре технологий VK. Сегодня хочу поделиться опытом по одной достаточно прикладной, но весьма увлекательной теме — разработке командной строки (CLI) на Go.

Платформа для инференса ML-моделей (inference platform) у нас молодая, ей всего лишь полгода, и мы активно расширяем команду. Так что, если вы хотите писать сервисы на Go с нуля, то приходите к нам, у нас найдутся задачи на любой вкус.

Читать далее

Истории

Срезы(slices) в Go

Время на прочтение15 мин
Количество просмотров2.7K

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

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

Читать далее

go:linkname в Go

Уровень сложностиПростой
Время на прочтение4 мин
Количество просмотров1.8K

Привет, Хабр!

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

Читать далее

Оптимизация Go map{-}{-}

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

Хеш-таблица(мапа) — одна из самых популярных структур данных, потому что поиск по ключу происходит за O(1). Причем ключ может быть любым любым типом, элементы которого можно сравнивать (Comparable Trait).

Я столкнулся с тем, что мапа не такая быстрая по бенчмаркам на языке GO, хотя теоретическая сложность алгоритма О(1).

Давайте рассмотрим следующую задачу и способы ее решения.

Читать далее

Сравнение Go и Python для веб-скрейпинга

Время на прочтение9 мин
Количество просмотров5.4K

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

Исследуем Go со всех сторон: обсуждаем конкурентность и безопасность, дискутируем о релизе 1.24

Время на прочтение3 мин
Количество просмотров1.2K

Как реализовать подходы Mutex и lock-free и какой из них выбрать для решения вашей задачи? Как подружиться с пакетами unsafe и использовать их для эффективной разработки? И, наконец, куда движется Go после в релизе 1.24?

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

Читать далее

lazyjournal — ленивый интерфейс для поиска и анализа логов

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

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

Читать далее

Коротко и по делу про механизм propagation в OpenTelemetry

Уровень сложностиПростой
Время на прочтение3 мин
Количество просмотров1.6K

Всем привет! Сегодня хочется поговорить про механизм распространения контекста трассировки в OpenTelemetry. Разберем, как он работает, и посмотрим простой пример на Go. Всё — коротко и по делу!

Меня зовут Носорев Константин, я backend-разработчик в Яндекс Пей, автор канала "Константин про IT" и просто любознательный инженер.

Читать далее

Эффективный пакетный инференс моделей. Опыт инженеров VK

Уровень сложностиСредний
Время на прочтение11 мин
Количество просмотров979

Привет, Хабр!  На связи Артём Петров, я занимаюсь разработкой ПО в центре технологий VK. Хочу рассказать о важной задаче обработки больших объёмов данных с использованием нескольких экземпляров одной и той же модели машинного обучения. Этот процесс называется batch inference («пакетный инференс») и позволяет значительно повысить производительность системы, особенно когда речь идёт о таблицах большого размера.

Читать далее

ХрюХрюКар v.2 или как я использую Go для защиты своего двора

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

Почти год назад я писал про ХрюХрюКар. Это экспериментальный проект, который проработал 7 месяцев в городе Балаково Саратовской области. За это время мы «поймали» около тысячи автомобилистов, разместивших свои авто на зеленых зонах, детских/спортивных площадках и тротуарах.

В этой статье я расскажу про совершенно новую версию ХХК, которую я написал на Go. Ну и отдам сообществу все исходники проекта.

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

Ближайшие события

19 марта – 28 апреля
Экспедиция «Рэйдикс»
Нижний НовгородЕкатеринбургНовосибирскВладивостокИжевскКазаньТюменьУфаИркутскЧелябинскСамараХабаровскКрасноярскОмск
22 апреля
VK Видео Meetup 2025
МоскваОнлайн
23 апреля
Meetup DevOps 43Tech
Санкт-ПетербургОнлайн
24 апреля
VK Go Meetup 2025
Санкт-ПетербургОнлайн
25 – 26 апреля
IT-конференция Merge Tatarstan 2025
Казань
14 мая
LinkMeetup
Москва
5 июня
Конференция TechRec AI&HR 2025
МоскваОнлайн
20 – 22 июня
Летняя айти-тусовка Summer Merge
Ульяновская область

Обработка паник в горутинах

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

Привет, Хабр!

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

Читать далее

Сервис поиска за три недели: как сделать и не пожалеть через год

Уровень сложностиСредний
Время на прочтение12 мин
Количество просмотров1.9K

Как запустить поисковый сервис, если у тебя всего три недели, а данные нужно агрегировать с десятков источников, каждый из которых работает по своим правилам? Как обойти жёсткие лимиты партнёров, которые ограничивают запросы в 500 RPM и p99 до 5 секунд, когда для быстрой загрузки первых результатов нужно минимум 1000 RPM? Как справиться с геопоиском, когда традиционные решения вроде Elasticsearch не подходят?

В 2022 году 2ГИС запустил сервис бронирования Отелло, и перед нами стояла амбициозная цель — не просто создать поиск, а сделать его быстрым, надёжным и масштабируемым, чтобы успеть занять место на рынке. Спойлер: мы справились. В этой статье расскажем, как именно.

Материал будет полезен бэкенд-разработчикам и продакт-менеджерам, которые сталкиваются с задачами интеграции сложных данных, высокой нагрузки и оптимизации поисковых алгоритмов. А если тебе понравится наш проект, рассмотри нашу вакансию — мы в поисках Senior Golang Engineer

Читать далее

Это путь воина: как я выучил Python и Go с помощью Цеттелькастена и кому точно не рекомендую метод

Уровень сложностиПростой
Время на прочтение9 мин
Количество просмотров42K

Привет, Хабр! Меня зовут Дмитрий, я работаю в YADRO. Я прошел большой путь в самостоятельном изучении языков программирования: от SQL до Go. Сначала я вообще не документировал процесс обучения, затем стал вести заметки по «академическому» принципу — писал конспекты, как в университете. Пока не открыл древовидную систему хранения данных, которая лежит в основе метода Цеттелькастен. 

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

Читать далее

Как мы делали Go-VShard-router

Уровень сложностиСредний
Время на прочтение9 мин
Количество просмотров2K

Привет, меня зовут Нуржан Сактаганов, я ведущий разработчик в Почте и Облаке Mail. Хочу рассказать о нашей библиотеке Go-VShard-router и поделиться трюками и выводами, которые мы сделали при разработке.

Читать далее

Дело о несрабатывающем тайм-ауте. Проблемы гистограмм Prometheus

Уровень сложностиСредний
Время на прочтение20 мин
Количество просмотров1.5K

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

Читать далее

Go 1.24: принципы работы и преимущества обновленной map

Уровень сложностиСредний
Время на прочтение11 мин
Количество просмотров5.9K

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

Привет, Хабр. Мы backend-разработчики SimbirSoft Павел и Алексей. В этой статье подробно разберём, как именно изменился механизм работы map и какие преимущества это даёт.

Go🚀

ИИ-подсказки в коде: костыли мышления или джетпак продуктивности?

Уровень сложностиСложный
Время на прочтение4 мин
Количество просмотров2.1K

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

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