Category : golang

golang
Advanced Goroutines Patterns в Go: Fan-out, Fan-in и Pipelines

В языке Go одним из важнейших преимуществ является мощная поддержка многопоточности и параллелизма за счёт горутин и каналов. В этой статье подробно разберём три продвинутых шаблона работы с горутинами:Fan-outFan-inPipelinesЭти паттерны позволяют писать эффективный, масштабируемый и читабельный многопоточный код.0. Как работают горутины под капотом в GO langВ примере Fan-out из статьи, распределение работы происходит следующим образом:Общий канал (jobs) используется как единая очередь задач, ку…

  • вторник, 29 апреля 2025 г. в 00:00:08
golang
Почему Big Tech тихонько уходит от Go

Хочу сразу пояснить, что я лично пишу на Go уже около 10 лет и уходить от него не планирую. Но тем не менее мне интересно мнение других разработчиков, которые работают или работали с Go на больших проектах. Во многом я согласен с недостатками Go, описанными ниже, так как сам сталкиваюсь с этими проблемами и на не самых больших проектах. Вот мой перевод статьи.1. Простота Go не справляется со сложностьюГлавное достоинство Go — его простота. Отсутствие сложных функций, сюрпризов и магии. Для небо…

  • вторник, 29 апреля 2025 г. в 00:00:07
golang
Ошибки в Go: Обработка, Обертки и Лучшие Практики

Go предлагает уникальный и прямолинейный подход к обработке ошибок, отличающийся от try-catch в других языках. Он основан на явной проверке возвращаемых значений, что требует больших проверок, но ведет к более надежному коду. Рассмотрим основы, современные инструменты пакета errors и лучшие практики. Если вам интересен процесс и вы хотите следить за дальнейшими материалами, буду признателен за подписку на мой телеграм-канал. Там я публикую полезныe материалы по разработке, Go, советы как быть …

  • понедельник, 28 апреля 2025 г. в 00:00:11
golang
Go defer: что не сказали в книгах

defer в Go — это мощный механизм для очистки ресурсов, закрытия файлов и разблокировки мьютексов. Вы наверняка слышали, что defer делает код чище и безопаснее.Когда вы открываете файл через os.Open() или os.Create(), Go выделяет ресурс операционной системы — дескриптор файла.И вот в чём важный момент:Этот дескриптор нужно обязательно закрыть через file.Close().Иначе файл останется "висеть" открытым — ресурсы будут утекать, программа начнёт захлёбываться или упадёт.Мьютекс (mutex = MUTua…

  • понедельник, 28 апреля 2025 г. в 00:00:10
golang
Golang Top 15 ошибок

Go – язык простой, но из-за кажущейся простоты многие разработчики совершают одни и те же ошибки, которые приводят к серьёзным последствиям в production. Ниже собраны 15 самых распространённых ошибок при разработке на Golang и рекомендации по их исправлению.1. Игнорирование ошибокИгнорирование ошибок приводит к скрытым багам, которые сложно найти.Неправильно:_, err := ioutil.ReadFile("config.json")Правильно:data, err := ioutil.ReadFile("config.json") if err != nil { log.Fata…

  • воскресенье, 27 апреля 2025 г. в 00:00:08
golang
Оптимизация конкурентных приложений в Go

Эпиграф в стиле А.П. Чехова по следам оригинального выступленияИван Семёныч Троицкий, программист сорока лет, застенчивый и робкий, от природы больше склонный к одиночеству, чем к публичным выступлениям, стоял в кулуарах конференции, смущённо улыбаясь и потирая ладонью вспотевший лоб. Доклад его — «Что не так с конкурентностью в Go и как с этим жить?» — принимали тепло, похлопывали по плечу и говорили:— Знатно выступил, Иван Семёныч, знатно!Однако он чувствовал, что наговорил массу пустяков. То…

  • суббота, 26 апреля 2025 г. в 00:00:13
golang
Golang: когда make, когда new

Привет, Хабр! Сегодня разберёмся, зачем в Go существуют два способа создавать значения — make и new, чем они отличаются, как они работают и когда выбирать каждый из них Что мы вообще создаём в GoЧтобы понимать разницу между make и new, нужно начать с главного: в Go есть два больших семейства типов. Одни — это обычные значения (int, struct, массивы, float64, bool, и т. д.), другие — это ссылочные структуры, к которым относятся только три типа: slice, map и chan.Первое семейство — value types — м…

  • пятница, 25 апреля 2025 г. в 00:00:08
golang
Еще раз про Di-контейнеры в golang

В предыдущей статье я попросил — «Расскажите, зачем вам DI‑контейнер в golang». Большое спасибо всем, кто оставил коммент и проголосовал. Общий вывод такой: используем контейнер, потому что с ним удобно писать тесты. Тесты — весомый аргумент, особенно в контексте того, что тест — это часть кода. Получается, мы все таки «тащим» Di‑контейнер в проект. Ну, хорошо....Вероятно, это будет uber‑fx, ведь у него хорошая документация, самое простое и понятное API по сравнению с другими..., или нет — не …

  • четверг, 24 апреля 2025 г. в 00:00:05
golang
Retry в Go: От граблей к дзену отказоустойчивости

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

  • четверг, 24 апреля 2025 г. в 00:00:05