Category : golang

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

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

  • пятница, 4 апреля 2025 г. в 00:00:14
golang
Решаем проблемы роста нагрузки в умных домах

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

  • пятница, 4 апреля 2025 г. в 00:00:14
golang
Слабые указатели в Go: в консерватории не всё в порядке

Меня зовут Дмитрий Солдатенко, я разработчик в Ви.Tech, IT-дочке ВсеИнструменты.ру. И теперь, когда формальное представление завершено, хочу поделиться своим, местами не очень формальным, батхертом по поводу слабых указателей.Предполагается, что вы пишете на Go и хотя бы на уровне чтения релиз-ноутов знакомы с концепцией слабых указателей (weak pointers).На первый взгляд, это полезный механизм для некоторых сценариев. Но у меня есть одна идеологическая и несколько фактических претензий к их реа…

  • вторник, 1 апреля 2025 г. в 00:00:10
golang
Разбираем паттерны конкурентности

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

  • вторник, 1 апреля 2025 г. в 00:00:08
golang
Параллельное программирование на Go

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

  • вторник, 1 апреля 2025 г. в 00:00:07
golang
Архитектура продуктового Go-сервиса

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

  • воскресенье, 30 марта 2025 г. в 00:00:07
golang
Планировщик Go

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

  • суббота, 29 марта 2025 г. в 00:00:08
golang
Свои языки программирования: зачем компании изобретают колесо заново

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

  • суббота, 29 марта 2025 г. в 00:00:07
golang
Удобное сканирование в структуры в связке Go/PgX. Решение проблемы сканирования в PgX. Golang

Работая с базами данных в Go, многие из нас сталкивались с библиотекой pgx — высокопроизводительным драйвером для PostgreSQL. Однако при всей ее мощи есть одна неудобная особенность: сканирование результатов запросов в структуры может быть довольно громоздким, особенно когда речь идет о вложенных структурах или списках.Проблема неудобного сканирования в go/pgxОсновная сложность заключается в том, что при выполнении SQL-запросов и получении результатов нам часто приходится вручную сканировать ка…

  • суббота, 29 марта 2025 г. в 00:00:06