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

Go *

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

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

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

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

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

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

Читать далее

Новости

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

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

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

Читать далее

Дело о несрабатывающем тайм-ауте

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

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

Читать далее

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

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

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

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

Go🚀

Истории

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

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

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

Читать далее

Что такое Lua: почему стоит его попробовать и как встроить в программу на Go

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

Lua — это лёгкий, быстрый и гибкий скриптовый язык, который появился в 1993 году. Он написан на C и чаще всего используется не как самостоятельный язык, а как встраиваемый инструмент для других приложений.

Если вы играли в World of Warcraft и устанавливали аддоны, вы уже сталкивались с Lua. Redis исполняет Lua-скрипты внутри себя. Lua используется в Nginx через модуль ngx_http_lua_module, который позволяет писать обработчики HTTP-запросов. В NeoVim плагины тоже можно писать на Lua. Короче говоря — язык не из популярных топов, но крайне полезен и встраиваем во многие инфраструктурные решения.

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

Читать далее

Расскажите, зачем вам DI-контейнер в golang

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

Я много писал на PHP + Symfony, писал на Angular, Vue. Я понимаю зачем DI-контейнер в Symfony, могу понять зачем он на фронте, особенно PWA. Я понимаю, какую проблему/задачу он там решает, почему он там нужен.

Но никак не могу понять, зачем он в микросервисах и даже сервисах большого размера на Go. И вот почему...

Так почему же

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

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

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

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

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

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

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

Проект на GitHub

Читать далее

Как мы пишем ML-приложения с использованием паттерна пайплайнов

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

Привет, Хабр! Я Тимофей Милованов, ведущий Golang-разработчик в команде VoiceKit, где мы занимаемся голосовыми технологиями. Мы разрабатываем сервисы по распознаванию и синтезу голоса, преобразованию одного голоса в другой, а еще голосовой биометрией.

Расскажу о том, почему структура этих сервисов похожа на пайплайн, почему Golang отлично подходит для реализации пайплайнов и как мы написали свою библиотеку для этих пайплайнов.

Читать далее

Docker теперь конкурент Ollama?

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

Ребята зарелизили новую крупную фичу, и, как по мне, это самая крупная механика с момента выхода dev containers, так как это показывает, насколько всё-таки AI всё глубже интегрируется в разработку.

Docker Model Runner - фактически инструментарий для запуска моделей локально, и это буквально полный конкурент для Ollama, но, будем объективны, пока что ещё очень сырой.

Читать далее

Решаем проблемы роста нагрузки в умных домах

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

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

Всё началось с того, что мы хотели избавиться от vendor-lock. К 2022 году мы уже наработали свои платформенные сервисы: управление голосом, создание сценария автоматизации. Хотелось их использовать еще шире, глубже и качественнее. Плюс ко всему, мы бы имели полный цикл поддержки устройств: выпуск их на рынок, обновление прошивок, докатка и улучшение пользовательского опыта.

Учитывая особенности работы с IoT, мы сформулировали требования к архитектуре...

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

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

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

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

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

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

Читать далее

Параллельное программирование на Go

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

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

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

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

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

Разбираем паттерны конкурентности

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

Параллельность - выполнение задач в один момент времени на разных логических ядрах.
Конкурентность - выполнение задач последовательно, но со сменой контекста на другую задачу в ожидание завершения иной задачи. У пользователя может возникнуть иллюзия многозадачности даже в однопроцессорной системе, поскольку смена контекста происходит быстро (микросекунды).

Читать далее

Слабые указатели в Go: в консерватории не всё в порядке

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

Меня зовут Дмитрий Солдатенко, я разработчик в Ви.Tech, IT-дочке ВсеИнструменты.ру. И теперь, когда формальное представление завершено, хочу поделиться своим, местами не очень формальным, батхертом по поводу слабых указателей.

Предполагается, что вы пишете на Go и хотя бы на уровне чтения релиз-ноутов знакомы с концепцией слабых указателей (weak pointers).

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


Если вы читаете эту статью, значит, меня держат в плену я всё-таки довёл её до публикации, и она не повторила судьбу многих других. Постараюсь кратко и тезисно, пока мне не стало лень писать. =)

Читать далее

Архитектура продуктового Go-сервиса

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

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

Читать далее

Удобное сканирование в структуры в связке Go/PgX. Решение проблемы сканирования в PgX. Golang

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

Go. PgxWrappy как решение всех проблем PgX. Если вы сталкивались с неудобным сканом в структуры посредством PgX на Go, то гляньте эту либу. Она решает все проблемы сканинга.

Читать далее

Свои языки программирования: зачем компании изобретают колесо заново

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

Кажется, языков программирования уже предостаточно, но IT-гиганты продолжают плодить свои. Google, Apple, JetBrains — готовых решений хватает до отказа, а им все равно хочется иметь что-то свое, эксклюзивное. Дело в технологической необходимости, гордыне или «синдроме NIH», когда чужое не берут? Может, это попытка захватить контроль над всем технологическим стеком или хитрый маркетинговый ход для завоевания умов разработчиков? Давайте копнем глубже, чтобы разобраться.
Читать дальше →

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

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

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

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

Читать далее

Как кросс-компилировать WebView Go-приложение с CGO для Linux с macOS: Zig, Docker и немного магии

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

Недавно я столкнулся с задачей собрать своё Go‑приложение написаное вокруг библиотеки github.com/webview/webview_go, которая является обёрткой для C/C++ библиотеки webview, для Linux, из чего вытекает необходимость использования CGO. Казалось бы, что сложного? Укажи GOOS=linux, пропиши компилятор CC= и CXX=, выполни go build — и готово. Но нет, CGO и зависимости вроде GTK превратили это в настоящий квест. В этой статье делюсь своим решением — надеюсь, оно сэкономит вам время.

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