Все потоки
Поиск
Написать публикацию
Обновить
89.86

Go *

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

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

Интерактивный тур по Go 1.24

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

Релиз Go 1.24 принесёт ряд важных обновлений, которые сделают разработку удобнее и эффективнее. В этом обзоре мы разберём ключевые изменения: поддержку слабых указателей, улучшенные финализаторы, новый механизм управления доступом к файловой системе, а также значительные оптимизации map, включая переход на Swiss Tables. Кроме того, появилось больше инструментов для тестирования и бенчмаркинга, новые криптографические возможности и усовершенствования работы с JSON.

Читать далее

Видишь суслика? А он есть! Как главная страница Яндекса переезжала на Go

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

Переезд большого сервиса с Perl на Golang едва ли кому-то покажется простой задачей. А теперь представьте, что это главная страница Яндекса, на которую ежедневно заходят миллионы пользователей. И что продукт постоянно дорабатывается, а значит, нельзя взять и остановить разработку на пару лет переезда. Представили? Сложно? А вот, оказывается, всё возможно. 

Привет, Хабр! Меня зовут Вячеслав Круглов. Я руковожу одной из команд разработки бэкенда главной страницы Яндекса. Расскажу, как мы переписывали бэкенд с Perl на Go, поделюсь интересными подробностями переезда, а также сравню компоненты и продуктовые блоки.

Читать далее

DEVops: Разрабатываем свой Kubernetes оператор с кастомными ресурсами на Go

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

Используете готовые операторы в Kubernetes? Я тоже... Но с какого‑то момента я начал задаваться вопросом: «а как люди их пишут?». И я нашел ответ!

В этой статье я наглядно покажу, как создать свой кастомный оператор в Kubernetes на Go при помощи kubebuilder. Оператор позволит отслеживать изменения ресурсов в кластере, а затем отправлять уведомления в Telegram или другие мессенджеры. Какие ресурсы «трекать» будем описывать через кастомные ресурсы (Custom Resource). Погнали!

Читать далее

Паттерн Конкурентного генератора в Go: Наглядное руководство

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

Генератор в Go позволяет асинхронно обрабатывать данные без перегрузки памяти. Разбираем основы работы.

Читать далее

Удобная ORM для Go с генерацией миграций и Query Builder’ом: Gormite

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

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

Читать далее

Идеи стоящие за дизайном языков программирования

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

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

Читать далее

Механика горутин и каналов в Golang: разбор с примерами

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

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

Читать далее

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

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

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

Читать далее

FissionGo: как запускать Go-функции в Kubernetes

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

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

Сегодня будем разбираться с FissionGo — фреймворком, который обещает избавить нас от работы с деплоями, контейнерами и YAML-манифестами.

Читать далее

Долой оверхед: как мы избавились от зависимостей в интеграционном тестировании микросервисов

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

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

Меня зовут Степан Охорзин, я Senior Go Developer в «Лаборатории Касперского». У нас в компании уже много проектов/продуктов, которые пишутся на Go, а еще мы мигрируем на него с «плюсов» там, где это возможно. Ведь Go — отличный язык, когда речь идет о распределенных системах; в частности, мы разрабатываем на нем облачные решения.

Сегодня речь пойдет как раз об одном из таких инструментов — Kaspersky Security Center (KSC). Если коротко, то KSC — это консоль для удобного управления безопасностью на уровне предприятия, эдакий аналог ЦУПа для сложных IT-систем. Как вы уже догадались, KSC построен на микросервисной архитектуре — и именно в нем мы организовали интеграционное тестирование. Теперь наши тесты не просто не уходят в технический долг, а могут сами служить документацией. Мы же думаем только о бизнес-логике, все остальные вопросы берет на себя DI-контейнер.

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

Читать далее

Гармония железа и кода: ускоряем Go, проектируя приложение с учетом архитектуры процессора

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

Представьте, что ваш код работает на 30% быстрее, при этом вы почти его не меняли. Звучит как магия? На самом деле это может стать реальностью, если учитывать архитектуру процессора при проектировании приложения и данных. 

Привет! Я Александр Шакмаев — технический лидер в Cloud.ru. В статье предлагаю разобраться, как небольшие изменения, основанные на знании архитектуры процессора, могут привести к значительному ускорению Go. Готовы раскрыть потенциал вашего кода? Тогда переходите под кат.

Заглянуть под кат

Как запустить публичный сайт на телефоне или экономим на спичках

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

Сейчас вас научу "плохому" — будем поднимать наше веб-приложение на телефоне. Для этой цели я накидал приложение на go, которое определяет IP адрес, вычисляет город, отправляет запрос во внешний сервис и отдает страницу с данными о погоде в вашей локации.

Читать далее

Алгоритм Кнута-Морриса-Пратта для поиска подстрок на Go

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

Поиск подстроки в строке — важная задачка в текстовой обработке. В Go стандартная библиотека имеет strings.Index, но он использует простой перебор символов, который работает с O(n × m) в худшем случае, где n — длина текста, m — длина подстроки.

Алгоритм Кнута-Морриса-Пратта решает эту проблему, используя префикс-функцию, которая позволяет пропускать заведомо ненужные сравнения. В результате его сложность O(n + m), что делает его подходящим для больших текстов и множественных поисковых запросов.

Читать далее

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

Суть Go: Time

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

Как не утонуть в параллельных вызовах и держать время под контролем? В статье разберём throttle и backpressure, научимся использовать таймеры, тикеры и таймауты без лишних задержек и зависаний — всё на простых примерах.

Читать далее

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

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

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

Читать далее

Заговор разработчиков против корпораций: архитектура и принципы

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

С момента написания предыдущей статьи я находился под пристальным вниманием. Попытка опубликовать материалы на англоязычных платформах обернулась фиаско — в первые же минуты легионы последователей тайного братства обрушились с критикой:

— Нет никакой организации! — вопили они.

Подозреваю, что слежка велась через мой телеграм-канал.

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

Узнать тайны, о которых молчали

Приручаем монстров в Go: боремся с разросшимся Makefile и монолитом — без распила на микросервисы

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

Мы в ответе за тех, кого разрастили. Go-разработчики из YADRO, Ви.Tech и Weborama  рассказали, как работать с проектами, которые без должного внимания стали бы техдолгом. А еще — поделились опытом генерации стабов и организации нетривиального стриминга данных на Go.

Читать далее

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

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

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

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

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

Читать далее

Как работает HTTP/2 и как использовать его в Go

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

HTTP/2 – это значительное обновление по сравнению с HTTP/1.1, решающее его ключевые ограничения, такие как блокировка Head-of-Line (HoL) и неэффективность многократных соединений. В этой статье мы разберёмся, почему HTTP/2 стал стандартом, как он устроен и чем отличается от предыдущей версии протокола. Мы рассмотрим ключевые концепции HTTP/2: мультиплексирование, сжатие заголовков HPACK, бинарный формат фреймов и серверный push.

Во второй части статьи мы покажем, как включить HTTP/2 в Go-приложениях. Вы узнаете, как правильно настроить HTTP-сервер с поддержкой TLS и ALPN, какие пакеты использовать и какие нюансы учитывать при разработке. Также мы обсудим практические аспекты работы с HTTP/2, возможные проблемы и пути их решения.

Читать далее

Эпическое программирование: пишем понятные и поддерживаемые саги

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

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

Алексей Бакин занимается разработкой внутренних продуктов. Один из них — это API-прокси, предоставляющее внешние API для внутренних сервисов. Для реализации этого решения использовали паттерн «Сага».

Читать далее

Вклад авторов