Библиотека Go (Golang) разработчика
2.51K subscribers
243 photos
92 videos
29 files
317 links
Полезные материалы по всему, что может быть полезно Golang разработчику. По всем вопросам @evgenycarter
Download Telegram
🗂 Работа с базами данных на Go: как писать эффективные запросы и миграции?

📅 22 мая в 20:00 МСК на открытом уроке мы разберем, как эффективно работать с БД в Go, создавать таблицы, использовать ОRМ и SQL-запросы, а также научимся делать миграции.

Что вы узнаете:

— Как организовать структуру БД для веб-приложений.

— Применение ОRМ и чистого SQL в Go.

— Как правильно настроить миграцию и работать с таблицами.

➡️ Открытый урок пройдет в преддверие старта курса «Go (Golang) Developer Basic». Все участники получат 🎁 скидку на обучение. Не упустите шанс развить свои навыки в Go: https://vk.cc/cM5jdg

Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
Строки(strings) в Go

Строки — одна из самых часто используемых структур данных в любом языке программирования. И в Go они повсюду: от простых приветствий вроде "Hello, World!" до сложных парсеров, логгеров и сетевых протоколов. На первый взгляд, с ними всё просто: создал, склеил, обрезал — и пошёл дальше. Но как это часто бывает, под простотой скрываются тонкости, игнорирование которых может привести к ошибкам и снижению производительности.

Go предлагает мощные, но специфичные механизмы работы со строками. Они тесно связаны с понятиями Unicode, UTF-8, рун, неизменяемости и байтовых представлений. Понимание этих механизмов позволяет не только избежать типичных подводных камней, но и писать более эффективный код.

https://habr.com/ru/articles/911614/

👉 @golang_lib
👍21🤔1
Работа с аренами: почти избавляемся от GC

Меня зовут Максим Горозий. Я тимлид в Т-Банке, работаю над нашей образовательной платформой, которая служит для разных направлений бизнеса. В ИТ больше 10 лет и успел поработать в двух GameDev-компаниях, где управление памятью занимало весомое время в оптимизации производительности кода. Люблю строить системы и взаимосвязи между ними, а также EdTech и преподавание, а еще больше — работать над инструментами обучения. Хотя начинал с C, я идеологический фанат Go, DDD и Agile.

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

https://habr.com/ru/companies/oleg-bunin/articles/828972/

👉 @golang_lib
💩3
🚀 Go — лучший старт для вашей карьеры в программировании.

🔎 Если вы хотите освоить один из самых востребованных языков разработки, не тратя времени на сложный синтаксис, Go — ваш идеальный выбор. Курс «Golang Developer. Basic» от OTUS — это возможность начать с нуля и научиться создавать эффективные приложения, веб-сервисы и системы.

Что вас ждёт:

— Легкость изучения и быстрая адаптация в Go.

— Применение best practices и реальных инструментов разработки.

— Основы разработки на Go и эффективное использование встроенных инструментов.

📖 Программа обновляется в соответствии с требованиями рынка. Диплом OTUS ценят ведущие IT-компании. Обучение ведут опытные преподаватели, работающие в реальных проектах.

😎 Старт курса — 29 мая.

🔴 Набор почти закрыт! Оставьте заявку и получите скидку на обучение: https://vk.cc/cMcnTS

Скидка 5% по промокоду: Go_05

Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
🤡4👍1
🚀 Go-профилирование как у профи!

🔍 Слишком медленно или жрёт кучу памяти? Эта статья расскажет, как:

1️⃣ Включить CPU- и heap-профилирование через runtime/pprof
2️⃣ Анализировать .prof`-файлы командой `go tool pprof (topN, граф, list)
3️⃣ Оптимизировать парсинг и работу с данными: стриминг вместо загрузки всего в память, замена дорогих функций, упрощение структур
4️⃣ Профилировать живой сервер через net/http/pprof и ловить hot-spots «на ходу»

Результат: время работы сократилось с ~14 до ~7 секунд, память — с 1.7 ГБ до 57 МБ!

👉 Читай подробное пошаговое руководство

👉 @golang_lib
👍4
🚀 Открой для себя идеальный путь к лидерству с карьерным тестом от ОЭЗ «Алабуга»! 🌟

Мечтаете о карьере в крупной компании, где ваш потенциал раскроется на полную? Наш тест поможет вам определить вашу уникальную лидерскую роль. Может быть, именно вы станете тем лидером, который выведет команду на новый уровень?

После прохождения теста вы можете заполнить заявку и получить приглашение на эксклюзивную лидерскую программу. Участие в программе открывает реальные перспективы трудоустройства в ОЭЗ «Алабуга», предоставляя шанс начать путь к профессиональному признанию.

Сделайте первый шаг к своему будущему сегодня! Пройдите тест, подайте заявку и начните строить свою карьеру вместе с нами. 🎯
🤮31🔥1🍾1
Golang: context изнутри

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

https://habr.com/ru/articles/827544/


Golang: bytes.Buffer изнутри

Работая с кодом на Go, любому специалисту приходилось сталкиваться со стандартным пакетом bytes . Внутри него лежит определение Buffer . Что же это такое?

https://habr.com/ru/articles/827550/


Golang: пакет bytes изнутри

Приветствую, в прошлой статье мы разбирали определение bytes.Buffer изнутри. Теперь хочется обратить внимание на сам пакет bytes. Что за ним скрывается? Каждому разработчику приходилось использовать его будь то в production или локальной разработке. Это достаточно мощный по своим меркам пакет, который предоставляет нам функции для работы с байтами.

https://habr.com/ru/articles/828044/

👉 @golang_lib
👍3🐳1
Вы уверены, что defer всегда безопасен?

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

https://habr.com/ru/articles/914642/

👉 @golang_lib
🤔2👍1
Анти-функциональные опции в Go

Часто в Go можно встретить такую конструкцию:


type Options struct {
Timeout time.Duration
Retries int
Logger *log.Logger
}

func DoSomething(ctx context.Context, opts Options) error {
if opts.Timeout == 0 {
opts.Timeout = 5 * time.Second
}
if opts.Retries == 0 {
opts.Retries = 3
}
if opts.Logger == nil {
opts.Logger = log.Default()
}

// дальше используем opts
}


На первый взгляд — удобно. Но на практике это ведёт к скрытым багам и неочевидному поведению. Почему?

🔸 Проблема 1: нулевое значение может быть валидным

Допустим, я хочу отключить ретраи и передаю Retries: 0. Но функция решает, что "ноль — это дефолт", и перезаписывает его на 3. В итоге получается поведение, которого явно не хотел.

🔸 Проблема 2: смешение ответственности

Функция DoSomething теперь делает больше, чем нужно: она и бизнес-логику выполняет, и значения инициализирует. Это противоречит принципу единственной ответственности и усложняет тестирование.

🔸 Проблема 3: дублирование

Если в коде много таких функций, каждая будет по-своему инициализировать Options. Это ведёт к дублированию и рассыпанной логике дефолтов.


💡 Что делать?

Вынеси дефолтные значения в отдельную функцию:


func DefaultOptions() Options {
return Options{
Timeout: 5 * time.Second,
Retries: 3,
Logger: log.Default(),
}
}


Теперь клиентский код выглядит явно:


opts := DefaultOptions()
opts.Retries = 0 // без ретраев

DoSomething(ctx, opts)


https://rednafi.com/go/dysfunctional_options_pattern/

👉 @golang_lib
👍3🤷‍♂2
🚀 LinDB — это распределённая time-series база данных, написанная на Go, с акцентом на высокую доступность, горизонтальное масштабирование и простую эксплуатацию.

Её архитектура построена по принципу separation of concerns:

Broker — принимает запросы, маршрутизирует их, управляет метаданными.
Storage — хранит и обрабатывает реальные данные, распределённые по шардам.

🔧 Ключевые фичи:

- Полноценный SQL-подобный язык запросов для анализа временных рядов.
- Высокая производительность благодаря column-based storage и адаптивной компрессии.
- Поддержка мониторинга систем с миллионами метрик и лейблов.
- Интеграция с Prometheus через remote write.

LinDB подойдёт, если тебе нужно собирать и анализировать метрики в масштабе целого датацентра или кластера Kubernetes — при этом с минимальными накладными расходами.

https://github.com/lindb/lindb

👉 @golang_lib
👍1
Тестируемый код в Golang

Когда я вижу очередную статью или видеоурок про тестирование кода, я почти уверен, что мне опять расскажут про моки.

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

https://habr.com/ru/companies/skbkontur/articles/917280/

👉 @golang_lib
👍1
🏎 Вы уже сталкивались с «глухими» зависаниями и гонками данных в Go? Настало время взять каналы под контроль!

💻 На открытом уроке «Подводные камни каналов в Go — и как их обходить» 1 июля в 20:00 МСК мы не просто обсудим, что такое каналы:

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

🚀 Представьте: ваш сервис обрабатывает запросы параллельно, без блокировок и утечек. Вы глубоко понимаете, как каналы помогают строить конкурентный код и уверенно внедряете это на любом проекте.

👉 Регистрируйтесь сейчас и получите персональную скидку на курс «Golang Developer. Professional»: https://vk.cc/cNbzNf

Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru
Пишем рантайм Golang на чистом C

Часть №1 | Планировщик Go
Часть №2 | Масштабирование планировщика

источник

👉 @golang_lib
👍4🤔1