Category : golang

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
golang
Dockerfile, только для LLM

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

  • среда, 23 апреля 2025 г. в 00:00:05
golang
Как оптимизировать код на Go? Раскладываем по полочкам

Привет, Хабр! Меня зовут Дмитрий Гурьянов, я руковожу командой Manuls в VK HR Tek (система ведения кадрового электронного документооборота). Сегодня расскажу о нюансах оптимизации на разных уровнях исполнения кода на Go.Я хотел бы рассмотреть оптимизацию большого количества не самого сложного кода — веб-приложений, информационных систем и так далее. Часто по требованиям бизнеса приходится писать много нового кода, и редко бывает возможность вернуться назад и улучшить старые функции, поскольку п…

  • вторник, 22 апреля 2025 г. в 00:00:07
golang
Пишем web-фреймворк на Go: как работают современные web-фреймворки под капотом

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

  • понедельник, 21 апреля 2025 г. в 00:00:05