Warning: Undefined array key 0 in /var/www/tgoop/function.php on line 65

Warning: Trying to access array offset on value of type null in /var/www/tgoop/function.php on line 65
724 - Telegram Web
Telegram Web
Что такое graceful shutdown?

Graceful Shutdown (корректное завершение работы) — это механизм безопасного завершения работы приложения, при котором:
1️⃣ Завершаются все текущие операции (например, обработка сообщений из очереди).
2️⃣ Освобождаются ресурсы (закрытие соединений с БД, файлов, сетевых сокетов).
3️⃣ Принимаются новые задачи только до определенного момента, после чего система начинает «затухание».

Библиотека Go для собеса
👍13🥱21
Что особенного в chan struct{}?

chan struct{} используется, когда значение не имеет значения — только сам факт сигнала
🔥11👍3
Почему chan struct{} считается более «правильным» вариантом для сигнализации, чем chan bool?

🔹 struct{} занимает 0 байт в памяти, в отличие от bool (1 байт).
🔹 Закрытый канал struct{} не вызывает панику при чтении.
🔹 Каналы bool могут вызвать путаницу, если их используют для нескольких сигналов (true, false).
🔹 chan struct{} передаёт только факт события, без лишней информации, что делает код чище и читаемее.
👍22🌚2
В чем разница между //go:build и // +build

// +build — это старая форма условной компиляции, которая использовалась до Go 1.17. Она пишется перед пакетом и требует пустой строки после всех директив

//go:build — это новая форма, введенная в Go 1.17. Она улучшает читаемость, так как использует логические выражения:
👍161
Разница между ParseAddr и MustParseAddr из пакета netip

ParseAddr возвращает netip.Addr и error, если переданный IP-адрес некорректен. Позволяет безопасно обработать ошибки.

MustParseAddr вызывает panic, если адрес неверный. Используется, когда ошибка невозможна
👍9❤‍🔥1
Как работает пагинация в API? Какие есть подходы?

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

Подходы:

Offset-Limit — задаются параметры offset (смещение) и limit (количество записей).
Пример: GET /users?offset=20&limit=10.
Недостаток: низкая производительность при больших данных, так как база сканирует записи до нужного смещения.

Cursor-based (Keyset Pagination) — вместо смещения используется уникальный идентификатор последней записи (cursor).
Пример: GET /users?cursor=abc123&limit=10.
Такой метод быстрее, так как использует индексы базы данных.

Page-based — клиент указывает номер страницы и размер.
Пример: GET /users?page=2&size=10.
Недостаток: возможны пропуски или дубли, если данные обновляются между запросами.
🔥10😁51👍1🥱1
Что такое BDD-подход?

BDD (Behavior-Driven Development) — это методология разработки, основанная на описании поведения системы на понятном языке. В отличие от TDD, BDD фокусируется на сценариях использования (Given-When-Then), делая тесты понятными для всей команды, включая бизнес-аналитиков.

В Go для BDD часто используют Ginkgo, который позволяет писать структурированные тесты в стиле «Describe → Context → It». Это улучшает читаемость, облегчает поддержку и помогает согласовать требования между разработчиками и заказчиками.
👏11
Для чего используется go mod?

go mod — это система управления зависимостями в Go, которая позволяет фиксировать версии пакетов, автоматически загружать их и работать без GOPATH

При инициализации модуля (go mod init) создается файл go.mod, который хранит информацию о зависимостях, а go.sum содержит контрольные суммы для проверки их целостности.

Основные команды:
• go get — добавляет/обновляет зависимости.
• go mod tidy — удаляет неиспользуемые пакеты.
• go mod vendor — создает локальную копию зависимостей.
👍15😁1🥱1
Как работает sync.Once под капотом

Под капотом sync.Once использует атомарную переменную и мьютекс:

1. При первом вызове once.Do(f) проверяется, выполнена ли уже функция f.
2. Если нет, sync.Once блокирует выполнение других горутин и запускает f().
3. После завершения выполнения устанавливается флаг, предотвращающий повторные вызовы.
👍7🥱1
Swipe right or swipe left

Что делать, если твои мэтчи в жизни не такие точные, как твой код?

Спокойно, 14 февраля в 19:00 по МСК мы разберём, как ML анализирует speed dating и предсказывает match.

📌 Мы возьмем реальные данные со speed dating.

📌 Обучим модель, которая скажет: match или swipe left.

📌 Разберём, какие признаки реально важны (спойлер: работа в IT — не прям гарантия успеха (наши маркетологи подтверждают 😥).

💡 Приходи, если хочешь прокачать свой Python, ML и, возможно, станешь идеальной парой, как самый стильные форсы.

👉 Записаться
😁1
Что такое fallthrough в Go

fallthrough — это ключевое слово, используемое внутри switch, которое позволяет явно передавать управление следующему case, даже если его условие не совпадает.

По умолчанию в Go выполнение switch завершается после первого совпавшего case, но если добавить fallthrough, выполнение продолжится с следующим case, без проверки его условия
👍14
Чем interface{} отличается от any?

interface{} — это пустой интерфейс, который может хранить значение любого типа.
any — это просто алиас (type any = interface{}), введённый в Go 1.18 для удобочитаемости кода.
👍26🥱4
Как ведёт себя select {} без case

Если написать select {} без case, программа зависнет навсегда. Это называют блокирующим select'ом.
😁20👍8🥱1
Как изменить один символ в строке в Go

Так как строки в Go неизменяемы, изменить символ напрямую нельзя. Но можно создать новую строку, например, с помощью преобразования в []rune или []byte.
🥱15👍10😁8
Что такое errors.Is и errors.As

• errors.Is(err, target) проверяет, является ли err экземпляром target, даже если ошибка была обернута (fmt.Errorf(«%w», err)).
Используется для сравнения ошибок по значению.

• errors.As(err, &target) проверяет, можно ли привести err к указанному типу (target должен быть указателем).
Используется для проверки и извлечения кастомных ошибок (например, структур с дополнительными полями).
👍12👏1
🏗 🔨 Как не сломать продакшен: 8 основных паттернов распределенных систем

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

В статье рассматриваются ключевые шаблоны, помогающие строить надёжные и эффективные распределённые системы.

➡️ Читать статью

🐸Библиотека devops'a
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
Чем json.Marshal отличается от json.MarshalIndent

• json.Marshal сериализует данные в компактный JSON без отступов.

• json.MarshalIndent добавляет отступы и форматирование, что делает JSON читаемым для людей.
👍18🔥1😁1
Когда Go делает inlining?

Go-компилятор выполняет inlining только для простых функций. В go build есть встроенные эвристики, которые учитывают:

• Размер кода — слишком большие функции не инлайнятся.

• Отсутствие сложных конструкций — если внутри есть for, switch, defer, recover() или вызовы • других не-инлайн-функций, inlining не происходит.

• Частоту вызова — часто вызываемые короткие функции инлайнятся для оптимизации.

Как проверить, была ли функция инлайнена?

Запустить компилятор с флагом -gcflags="-m"
👍15🥱41
Чем опасен вызов defer в цикле?

Если использовать defer внутри цикла, все отложенные функции будут выполнены только после выхода из цикла, а не по окончанию итерации. Это может привести к утечкам ресурсов или неожиданному поведению.
👍4🥱4
Что означает value := myMap[key] без ok-проверки

Без ok-проверки Go возвращает zero value для типа значения, если ключ отсутствует.
👍9
2025/07/08 18:34:31
Back to Top
HTML Embed Code: