🚀 Ошибки с
В статье “Avoiding Common sync.WaitGroup Mistakes in Go” Джон Калхаун разбирает, как Go 1.25 помогает избежать частых ошибок при использовании
### 🔹 Ошибка:
Часто встречающийся неправильный код:
❌ Проблема: wg.Add(1) вызывается уже внутри горутины. Она может не успеть выполниться до wg.Wait(), из-за чего программа зависает или ведёт себя некорректно.
✅ В Go 1.25 go vet теперь предупреждает:
“WaitGroup.Add called from inside new goroutine”
Правильный вариант:
🔹 Новый метод wg.Go()
Go 1.25 добавил удобный метод Go, который сам вызывает Add и Done:
Этот код эквивалентен такому:
✅ Итог
- go vet теперь ловит ошибки, когда wg.Add вызывается внутри горутины.
- Новый метод wg.Go(...) упрощает код и снижает риск ошибок.
Подробнее: https://www.calhoun.io/avoiding-common-sync-waitgroup-mistakes/
sync.WaitGroup
в Go и что нового в Go 1.25 В статье “Avoiding Common sync.WaitGroup Mistakes in Go” Джон Калхаун разбирает, как Go 1.25 помогает избежать частых ошибок при использовании
sync.WaitGroup
. ### 🔹 Ошибка:
wg.Add
внутри горутины Часто встречающийся неправильный код:
for i := 0; i < 5; i++ {
go func() {
wg.Add(1)
defer wg.Done()
// работа…
}()
}
wg.Wait()
❌ Проблема: wg.Add(1) вызывается уже внутри горутины. Она может не успеть выполниться до wg.Wait(), из-за чего программа зависает или ведёт себя некорректно.
✅ В Go 1.25 go vet теперь предупреждает:
“WaitGroup.Add called from inside new goroutine”
Правильный вариант:
for i := 0; i < 5; i++ {
wg.Add(1)
go func() {
defer wg.Done()
// работа…
}()
}
wg.Wait()
🔹 Новый метод wg.Go()
Go 1.25 добавил удобный метод Go, который сам вызывает Add и Done:
for i := 0; i < 5; i++ {
wg.Go(func() {
// работа…
})
}
wg.Wait()
Этот код эквивалентен такому:
wg.Add(1)
go func() {
defer wg.Done()
f()
}()
✅ Итог
- go vet теперь ловит ошибки, когда wg.Add вызывается внутри горутины.
- Новый метод wg.Go(...) упрощает код и снижает риск ошибок.
Подробнее: https://www.calhoun.io/avoiding-common-sync-waitgroup-mistakes/
❤30👍9👏6🎉3🥰1
🚀 Docker + Go pro tip
Go идеально подходит для Docker, так как можно собрать статически слинкованный бинарь и запускать его в ультра-лёгком образе.
💡 Такой приём:
- даёт контейнер весом в несколько МБ,
- убирает лишние зависимости,
- ускоряет доставку и запуск приложения.
@golang_interview
Go идеально подходит для Docker, так как можно собрать статически слинкованный бинарь и запускать его в ультра-лёгком образе.
# Этап сборки
FROM golang:1.23 AS builder
WORKDIR /src
COPY . .
RUN go mod download
RUN CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o app .
# Финальный минимальный образ
FROM scratch
WORKDIR /app
COPY --from=builder /src/app .
ENTRYPOINT ["./app"]
💡 Такой приём:
- даёт контейнер весом в несколько МБ,
- убирает лишние зависимости,
- ускоряет доставку и запуск приложения.
@golang_interview
❤12🥱8👍4🔥2
Введение. Собеседования на позиции, связанные с данными (аналитики, инженеры, ученые данных), всё чаще включают нестандартные и продвинутые вопросы по SQL.
Большие технологические компании (Google, Amazon и др.) предъявляют высокие требования: важна не только правильность запроса, но и умение оптимизировать его и разбираться в реальных бизнес-данных.
В этом гайде мы разберем категории наиболее распространенных сложных SQL-задач с реальных собеседований – от платформ вроде DataLemur, LeetCode, StrataScratch – и подробно поясним решения.
Каждая задача сопровождена анализом: условие, оптимальный подход, используемые SQL-конструкции, возможные ошибки и финальное решение (для PostgreSQL и MySQL, с указанием различий где необходимо).
В конце добавлен отдельный раздел о современных базах данных, включая векторные БД (Pinecone, Weaviate, Milvus и др.), с примерами того, что могут спросить про них на собеседовании и как выглядят SQL-подобные запросы для работы с векторами.
📌 Читать гайд
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥6👍3❤2
🚀 Микросервисная платформа для страхования
Yosef — это открытая микросервисная платформа для финансовой страховой отрасли, разработанная на .NET, Python, TypeScript и Golang. Она обеспечивает масштабируемость, гибкость и высокую наблюдаемость для современных страховых приложений.
🚀 Основные моменты:
- Микросервисная архитектура для легкости масштабирования
- Централизованное управление идентификацией и доступом
- Полный цикл страхования от оценки до создания полиса
- Высокая наблюдаемость с использованием Grafana и Prometheus
- Интеграция с современными инструментами безопасности
📌 GitHub: https://github.com/elyosemite/Yosef
#csharp
Yosef — это открытая микросервисная платформа для финансовой страховой отрасли, разработанная на .NET, Python, TypeScript и Golang. Она обеспечивает масштабируемость, гибкость и высокую наблюдаемость для современных страховых приложений.
🚀 Основные моменты:
- Микросервисная архитектура для легкости масштабирования
- Централизованное управление идентификацией и доступом
- Полный цикл страхования от оценки до создания полиса
- Высокая наблюдаемость с использованием Grafana и Prometheus
- Интеграция с современными инструментами безопасности
📌 GitHub: https://github.com/elyosemite/Yosef
#csharp
GitHub
GitHub - elyosemite/Yosef: Yosef is a comprehensive, open-source microservices built with .NET C#, Python, Typescript and Gleam…
Yosef is a comprehensive, open-source microservices built with .NET C#, Python, Typescript and Gleam for the financial insurance industry. It provides a robust, scalable and observable foundation i...
👍4❤2🔥2🌚2🌭2🐳1
Хотите попробовать себя в бэкенде, но страшно уйти от фронта?
Это чувство знакомо каждому фронтендеру: сложно оставить родной JS и Webpack и отправиться в неизведанный мир API, баз данных и Docker.
На открытом уроке мы покажем, что переход на Golang — это проще, чем кажется. Вместе разберём, как перенести знакомые фронтендеру навыки в мир Go, создадим работающий API всего за 15 минут и убедимся, что Go — это удобно, логично и выгодно.
📅 Не упускайте шанс открыть для себя новые горизонты в разработке! Встречаемся 17 сентября в 20:00 МСК.
👉 Запишитесь на открытый урок → https://tglink.io/e9b05b52aa38?erid=2W5zFG1cUV6
Реклама. ООО "ОТУС ОНЛАЙН-ОБРАЗОВАНИЕ". ИНН 9705100963.
Это чувство знакомо каждому фронтендеру: сложно оставить родной JS и Webpack и отправиться в неизведанный мир API, баз данных и Docker.
На открытом уроке мы покажем, что переход на Golang — это проще, чем кажется. Вместе разберём, как перенести знакомые фронтендеру навыки в мир Go, создадим работающий API всего за 15 минут и убедимся, что Go — это удобно, логично и выгодно.
📅 Не упускайте шанс открыть для себя новые горизонты в разработке! Встречаемся 17 сентября в 20:00 МСК.
👉 Запишитесь на открытый урок → https://tglink.io/e9b05b52aa38?erid=2W5zFG1cUV6
Реклама. ООО "ОТУС ОНЛАЙН-ОБРАЗОВАНИЕ". ИНН 9705100963.
🤣5
Please open Telegram to view this post
VIEW IN TELEGRAM
🤔6👍2🔥2🥰1
Совет на 2025 год — переходите на Go.
На Go собирают банки, маркетплейсы и highload-сервисы. Зарплаты мидлов начинаются от 200 000 ₽, а у сеньоров доходят до 600 000 ₽.
А чтобы освоить его всего за 3 месяца — изучите канал Максима Аверина.
Его бэкграунд: Senior Golang/Python (X5, Lamoda, BestDoctor), 7 лет в бэкенде, экс-тимлид и PM, 300+ собеседований с 2018
На канале вы найдёте:
— Советы, которые в разы повысят ваши шансы на перекат в Go
— Как легко выбивать себе ту ЗП, которую желаете: скрипты переговоров и шаблоны писем
— Как сделать мощный проект с code-review и уже через три недели пойти на собесы.
Огромный опыт, который ты можешь перенять абсолютно бесплатно. Переходи и изучай: @maksim_golang
На Go собирают банки, маркетплейсы и highload-сервисы. Зарплаты мидлов начинаются от 200 000 ₽, а у сеньоров доходят до 600 000 ₽.
А чтобы освоить его всего за 3 месяца — изучите канал Максима Аверина.
Его бэкграунд: Senior Golang/Python (X5, Lamoda, BestDoctor), 7 лет в бэкенде, экс-тимлид и PM, 300+ собеседований с 2018
На канале вы найдёте:
— Советы, которые в разы повысят ваши шансы на перекат в Go
— Как легко выбивать себе ту ЗП, которую желаете: скрипты переговоров и шаблоны писем
— Как сделать мощный проект с code-review и уже через три недели пойти на собесы.
Огромный опыт, который ты можешь перенять абсолютно бесплатно. Переходи и изучай: @maksim_golang
🤣18👍3❤1
🧩 Кастомизируемый JavaScript-парсер с минимальным ядром
Идея проста: ядро парсера — максимально маленькое. Все «дорогие» фичи JS включаются опционально. Так вы получаете нужный синтаксис без лишних накладных расходов.
🔧 Что это даёт
- Меньше зависимостей и памяти.
- Быстрее разбор там, где не нужен весь JS (например, без `class/async/regex`).
- Гибкая сборка под конкретный продукт: от валидации шаблонов до мини-рантайма.
🧱 Архитектура
- Feature flags: подключайте только нужные конструкции (например,
- Модульный AST: узлы для отключённых фич не создаются.
- Стримовый лексер: позволяет парсить большие файлы без полного буфера.
- Sandbox-режим: строгие лимиты глубины/времени для безопасной обработки.
▶️ Пример (Go, условный API)
https://github.com/xjslang/xjs
Идея проста: ядро парсера — максимально маленькое. Все «дорогие» фичи JS включаются опционально. Так вы получаете нужный синтаксис без лишних накладных расходов.
🔧 Что это даёт
- Меньше зависимостей и памяти.
- Быстрее разбор там, где не нужен весь JS (например, без `class/async/regex`).
- Гибкая сборка под конкретный продукт: от валидации шаблонов до мини-рантайма.
🧱 Архитектура
- Feature flags: подключайте только нужные конструкции (например,
import
, jsx
, template
, `async`).- Модульный AST: узлы для отключённых фич не создаются.
- Стримовый лексер: позволяет парсить большие файлы без полного буфера.
- Sandbox-режим: строгие лимиты глубины/времени для безопасной обработки.
▶️ Пример (Go, условный API)
package main
import (
"context"
"time"
"example.com/jsparser"
)
func main() {
ctx, cancel := context.WithTimeout(context.Background(), 200*time.Millisecond)
defer cancel()
p := jsparser.New(jsparser.Options{
Features: jsparser.Enable(
jsparser.Base, // идентификаторы, выражения, блоки
jsparser.ImportESM, // поддержка import/export
jsparser.TemplateLit, // шаблонные строки
// jsparser.Class, // можно не включать
// jsparser.Async, // можно не включать
// jsparser.JSX, // включайте по надобности
),
MaxDepth: 512,
MaxTokens: 2_000_000,
})
ast, err := p.Parse(ctx, []byte(`import x from "./m.js"; const s = `+"`hi ${x}`"+`;`))
if err != nil {
panic(err)
}
_ = ast // используйте AST для анализа/трансформаций
}
https://github.com/xjslang/xjs
🔥3❤1
🛠️ Управление оповещениями с Keep
Keep — это платформа для управления оповещениями и AIOps, предлагающая единый интерфейс для обработки инцидентов. Она включает функции дедупликации, фильтрации и интеграции с различными инструментами мониторинга.
🚀 Основные моменты:
- 🔍 Удобный интерфейс для управления инцидентами
- 🛠️ Многофункциональные инструменты для обработки оповещений
- 🔄 Глубокая интеграция с инструментами мониторинга
- ⚡ Автоматизация процессов с помощью GitHub Actions
- 🤖 AI-поддержка для корреляции и обобщения данных
📌 GitHub: https://github.com/keephq/keep
#go
Keep — это платформа для управления оповещениями и AIOps, предлагающая единый интерфейс для обработки инцидентов. Она включает функции дедупликации, фильтрации и интеграции с различными инструментами мониторинга.
🚀 Основные моменты:
- 🔍 Удобный интерфейс для управления инцидентами
- 🛠️ Многофункциональные инструменты для обработки оповещений
- 🔄 Глубокая интеграция с инструментами мониторинга
- ⚡ Автоматизация процессов с помощью GitHub Actions
- 🤖 AI-поддержка для корреляции и обобщения данных
📌 GitHub: https://github.com/keephq/keep
#go
❤2🔥2👍1
Принесли вам отличный ресурс, который собрал огромное количество практических задач по SQL.
Там можно найти всё: от базовых упражнений до сложных вопросов, включая отдельный блок с заданиями от FAANG.
Но самое ценное здесь не сами вопросы, а структура подачи:
- Формулировка задачи в формате собеседования
- Подробное решение с объяснением
- Встроенный редактор, чтобы попробовать свои силы прямо на месте
И главное — доступ полностью бесплатный.
Начать тренироваться
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥3
This media is not supported in your browser
VIEW IN TELEGRAM
С появлением ChatGPT активность снизилась, зато изменился характер вопросов:
🔹 Их стало меньше, но они длиннее и сложнее.
🔹 Кода стало больше (Python +21%).
🔹 Ответы стали содержательнее.
Учёные проанализировали данные за 2 года:
- Общее число вопросов падает.
- Простых вопросов меньше.
- Средних — больше.
- Сложные остаются на том же уровне.
👉 Итог: простые задачи люди решают через ChatGPT, а на Stack Overflow остаются сложные и контекстные вопросы.
Полное исследование: https://arxiv.org/abs/2509.05879
Видеоразбор: https://www.youtube.com/watch?v=8PgVhqdZo1I
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7🔥2
🚀 Удобный интерфейс для работы с Kubernetes-кластерами
Aptakube — это мощный инструмент для управления Kubernetes-кластерами с интуитивно понятным интерфейсом. Он поддерживает одновременное подключение к нескольким кластерам и предлагает функции, такие как агрегированный просмотр логов и возможность изменения объектов.
🚀Основные моменты:
- 💯 Подключение к нескольким кластерам одновременно
- ⚡️ Агрегированный просмотр логов
- ⚖️ Сравнение ресурсов
- 🎉 Никакой конфигурации не требуется
- ✅ Совместимость с любым Kubernetes-кластером
📌 GitHub: https://github.com/aptakube/aptakube
#go
Aptakube — это мощный инструмент для управления Kubernetes-кластерами с интуитивно понятным интерфейсом. Он поддерживает одновременное подключение к нескольким кластерам и предлагает функции, такие как агрегированный просмотр логов и возможность изменения объектов.
🚀Основные моменты:
- 💯 Подключение к нескольким кластерам одновременно
- ⚡️ Агрегированный просмотр логов
- ⚖️ Сравнение ресурсов
- 🎉 Никакой конфигурации не требуется
- ✅ Совместимость с любым Kubernetes-кластером
📌 GitHub: https://github.com/aptakube/aptakube
#go
🔥5❤1👍1🥰1
This media is not supported in your browser
VIEW IN TELEGRAM
Уже 23 октября узнаем больше о хакрдкорной разработке dev-to-dev решений
Техплатформа Городских сервисов Яндекса проводит митап, на котором эксперты поделятся опытом создания архитектуры нагруженный системы, обрабатывающей сотни тысяч rps в брокере сообщени на MongoDB, и как писать IO-bound сервисы под высокими нагрузками на С++ так же как на Go.
В программе выступления Антона Полухина, Ромы Елизарова, Лёши Иванова и Влада Назарова, а также нетворкинг в неформальной атмосфере.
Если интересуетесь разработкой dev-to-dev решений и вы опытный разработчик, обязательно приходите.
👉 23 октября, сбор гостей с 18:00
👉 Москва, офлайн
Регистрируйтесь и зовите коллег!
Мероприятие бесплатное. Количество мест ограничено — пожалуйста, дождитесь нашего подтверждения.
Техплатформа Городских сервисов Яндекса проводит митап, на котором эксперты поделятся опытом создания архитектуры нагруженный системы, обрабатывающей сотни тысяч rps в брокере сообщени на MongoDB, и как писать IO-bound сервисы под высокими нагрузками на С++ так же как на Go.
В программе выступления Антона Полухина, Ромы Елизарова, Лёши Иванова и Влада Назарова, а также нетворкинг в неформальной атмосфере.
Если интересуетесь разработкой dev-to-dev решений и вы опытный разработчик, обязательно приходите.
👉 23 октября, сбор гостей с 18:00
👉 Москва, офлайн
Регистрируйтесь и зовите коллег!
Мероприятие бесплатное. Количество мест ограничено — пожалуйста, дождитесь нашего подтверждения.
❤1👍1🔥1🌭1
🔥 Google выпустил Mangle — инструмент для декларативного логического программирования и работы с данными через правила.
Что это такое:
- Основан на языке Datalog, но расширяет его возможностями: агрегаты, функции, опциональная типизация.
- Можно объединять данные из разных источников и описывать связи правилами и рекурсией.
- Реализован на Go и работает как библиотека, которую легко встроить в приложение.
Зачем это нужно:
- Позволяет описывать вычисления не кодом «пошагово», а в виде правил.
- Подходит для задач со сложными связями: графы, зависимости, анализ версий, обработка свойств.
- Сохраняет баланс: простота декларативного подхода + реальная функциональность для практических кейсов.
Ограничения:
- Некоторые расширения ломают гарантии «чистого» Datalog (например, не всегда есть гарантия завершения вычислений).
- Проект пока развивается (версия 0.3.0), экосистема ещё небольшая.
Когда использовать:
- Для интеграции данных из разных источников (базы, API, файлы).
- Для анализа сложных структур вроде графов или систем зависимостей.
- Когда важна читаемость и поддерживаемость логики — правила легче поддерживать, чем запутанный код.
🔗 Репозиторий: https://github.com/google/mangle
Что это такое:
- Основан на языке Datalog, но расширяет его возможностями: агрегаты, функции, опциональная типизация.
- Можно объединять данные из разных источников и описывать связи правилами и рекурсией.
- Реализован на Go и работает как библиотека, которую легко встроить в приложение.
Зачем это нужно:
- Позволяет описывать вычисления не кодом «пошагово», а в виде правил.
- Подходит для задач со сложными связями: графы, зависимости, анализ версий, обработка свойств.
- Сохраняет баланс: простота декларативного подхода + реальная функциональность для практических кейсов.
Ограничения:
- Некоторые расширения ломают гарантии «чистого» Datalog (например, не всегда есть гарантия завершения вычислений).
- Проект пока развивается (версия 0.3.0), экосистема ещё небольшая.
Когда использовать:
- Для интеграции данных из разных источников (базы, API, файлы).
- Для анализа сложных структур вроде графов или систем зависимостей.
- Когда важна читаемость и поддерживаемость логики — правила легче поддерживать, чем запутанный код.
🔗 Репозиторий: https://github.com/google/mangle
👍3❤1🔥1🥰1🤔1
📌 В Go есть два разных способа собирать пути, и это важно понимать:
👉 Нужно указать путь к файлу на диске?
Используй
Он сам подставит правильные разделители:
-
-
👉 Нужно собрать путь со слешами, например для URL?
Используй
Он всегда будет использовать
⚠️ На Linux оба варианта могут выглядеть одинаково, но на Windows результат будет другим.
#golang #go #programming #backend
👉 Нужно указать путь к файлу на диске?
Используй
filepath.Join
из пакета path/filepath
. Он сам подставит правильные разделители:
-
/
на Linux и macOS -
\
на Windows 👉 Нужно собрать путь со слешами, например для URL?
Используй
path.Join
из пакета path
. Он всегда будет использовать
/
и работать одинаково на всех ОС. ⚠️ На Linux оба варианта могут выглядеть одинаково, но на Windows результат будет другим.
#golang #go #programming #backend
👍17❤2