В многопоточных приложениях mutex часто становятся узким местом из-за ожидания и блокировок. Lock-free структуры данных позволяют избежать этих проблем, используя атомарные операции и циклы Compare-And-Swap (CAS).
Вместо того, чтобы ждать разрешения на изменение, поток просто пробует обновить значение снова и снова, пока не получится.
Основная идея CAS-цикла такова: читаем текущее значение, вычисляем новое на его основе, пытаемся заменить старое новым. Если другой поток изменил значение раньше, попытка не удаётся — цикл повторяется:
for {
oldVal := atomic.LoadInt64(&counter)
newVal := oldVal + 1
if atomic.CompareAndSwapInt64(&counter, oldVal, newVal) {
break
}
}Это часто быстрее, чем блокировки, особенно при высокой конкуренции. Но есть подводные камни — например, проблема ABA, когда значение вернулось к старому, и CAS не видит изменений. Здесь помогают счётчики версий и строгие барьеры памяти.
Lock-free код сложнее писать и отлаживать, но он приносит выигрыш в масштабируемости и производительности там, где mutex становятся бутылочным горлышком. Используйте lock-free подходы там, где настоящая конкуренция и важны задержки.
🔹 ML для старта в Data Science
🔹 Получить консультацию менеджера
🔹 Сайт Академии 🔹 Сайт Proglib
#GoToProduction
Please open Telegram to view this post
VIEW IN TELEGRAM
👍13❤5😢3🤔1
📰 Генератор статических страниц для Git-реп на Go
Gitmal — это инструмент, который превращает Git-репозитории в красивые статические HTML страницы. Он автоматически создаёт страницу с файлами, коммитами, подсветкой кода и поддержкой markdown. Зачем? Для документирования и презентации проектов.
Можно запустить простым вызовом в каталоге с репозиторием:
Gitmal отлично подойдёт разработчикам, желающим быстро и без сложных настроек получить удобный обзор своего кода, истории и документации в одном месте.
Проект активно развивается, лицензирован MIT и написан в основном на Go.
🔹 Специалист по ИИ
🔹 Получить консультацию менеджера
🔹 Сайт Академии 🔹 Сайт Proglib
🐸 Библиотека Go-разработчика
#GoToProduction
Gitmal — это инструмент, который превращает Git-репозитории в красивые статические HTML страницы. Он автоматически создаёт страницу с файлами, коммитами, подсветкой кода и поддержкой markdown. Зачем? Для документирования и презентации проектов.
Можно запустить простым вызовом в каталоге с репозиторием:
gitmal .
Gitmal отлично подойдёт разработчикам, желающим быстро и без сложных настроек получить удобный обзор своего кода, истории и документации в одном месте.
Проект активно развивается, лицензирован MIT и написан в основном на Go.
🔹 Специалист по ИИ
🔹 Получить консультацию менеджера
🔹 Сайт Академии 🔹 Сайт Proglib
#GoToProduction
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6🤔2
Пишешь ML на Go? Учи матчасть.
Go идеален для инференса моделей благодаря своей производительности. Но чтобы переписывать тяжёлые Python-решения на Go или оптимизировать алгоритмы, нужно железное понимание математики.
«Математика для разработки AI-моделей» — старт уже завтра.
— Интенсивная программа.
— Цена 28 200 ₽.
— Практический уклон.
Забирайте базу для HighLoad AI:
👉 Записаться
Проверь себя: @proglib_academy_webinar_bot
Go идеален для инференса моделей благодаря своей производительности. Но чтобы переписывать тяжёлые Python-решения на Go или оптимизировать алгоритмы, нужно железное понимание математики.
«Математика для разработки AI-моделей» — старт уже завтра.
— Интенсивная программа.
— Цена 28 200 ₽.
— Практический уклон.
Забирайте базу для HighLoad AI:
👉 Записаться
Проверь себя: @proglib_academy_webinar_bot
❤2👾1
Команда Go выпустила обновления версий 1.25.5 и 1.24.11, которые закрывают две серьёзные уязвимости в пакете crypto/x509.
CVE-2025-61729 — это угроза типа отказ в обслуживании. Проблема скрывалась в методе
HostnameError.Error(), который при построении строки ошибки мог потребовать огромное количество памяти и процессорного времени.CVE-2025-61727 — более коварная уязвимость в логике валидации сертификатов. Речь идёт об исключённых поддоменах, которые должны ограничивать действие подстановочных Subject Alternative Name.
🔹 Алгоритмы и структуры данных
🔹 Получить консультацию менеджера
🔹 Сайт Академии 🔹 Сайт Proglib
#GoLive
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥3🤔3👍2❤1
В AI проектах Go лучше всего чувствует себя не в роли «я сам напишу модель», а в роли надежного каркаса вокруг моделей. Речь про сервисы, API, очереди, оркестрацию пайплайнов, интеграцию с другими системами.
Тяжелые вычисления и обучение обычно остаются на Python, C++ или готовых AI платформах, а Go берет на себя устойчивость, предсказуемое время ответа и нагрузку.
Допустим, у вас есть сервис с моделью на Python, поднятый через FastAPI или gRPC. Go слой выглядит как обычный HTTP или gRPC сервис, который:
• принимает запрос от клиента
• валидирует данные, обогащает контекст
• делает запрос к модельному сервису
• обрабатывает ответ, пишет логи и метрики
• возвращает результат пользователю
Где Go раскрывается по максимуму
— API слой и шлюзы
Go используют для API gateway и BFF (backend for frontend): высокая нагрузка, множество клиентов, разные типы аутентификации и трейсинг.
AI здесь — всего лишь одна из зависимостей. Это позволяет не смешивать фронтовую и AI‑специфику.
— Оркестрация AI пайплайнов
Обработка данных, фичеринг, вызовы нескольких моделей по цепочке, запись результатов, ретраи, дедлайны — всё это удобно делать на Go в виде набора микросервисов либо централизованного оркестратора.
Go хорошо сочетается с:
• очередями (Kafka, RabbitMQ, NATS)
• workflow системами (Temporal, Cadence, Argo Workflows
• gRPC и protobuf для связи с Python сервисами.
— Реалтайм и стриминг
Если вам нужен стриминговый чат, онлайн‑анализ событий, веб‑сокеты или SSE поверх LLM — Go с его сетевой моделью и goroutine хорошо закроет эту задачу. Модель может отвечать стримом, а Go будет потоково прокидывать их клиенту, не блокируя остальную систему.
Что явно не стоит насильно тащить в Go
— обучение больших моделей и сложный
— эксперименты с фреймворками, где вся экосистема вокруг Python
— CUDA‑обвязка и кастомные GPU‑ядра без серьёзной причины
Удачная стратегия на 2026 год выглядит так: не превращать Go в ещё один ML язык, а использовать его как надёжный сервисный и оркестрационный слой вокруг AI.
🔹 Математика для разработки AI-моделей
🔹 Получить консультацию менеджера
🔹 Сайт Академии 🔹 Сайт Proglib
#GoDeep
Please open Telegram to view this post
VIEW IN TELEGRAM
👍13❤5😢1
Собеседования это стресс. И не всегда в стрессе можно ответить на вопрос так, как было задумано. Некоторые вопросы настолько мозговыносящие, что невольно думаешь про интервьюера самые плохие мысли.
💬 Накидайте в комменты вопросов, которые ввели вас в ступор или просто заставили сгореть после собеса 👇
🔹 Программирование на языке Python
🔹 Получить консультацию менеджера
🔹 Сайт Академии 🔹 Сайт Proglib
#GoTalk
Please open Telegram to view this post
VIEW IN TELEGRAM
А вы тоже любите испытания? У нас тут есть статья, в которой описывается как поставить дистрибутив Fedora на макбук с чипом Т2.
Fedora ставится полностью рабочей, с Wi-Fi, звуком и тачпадом, если не торопиться с патчами. Для айтишников такой вызов превращается в стабильную dev-машину.
🔹 Основы IT для непрограммистов
🔹 Получить консультацию менеджера
🔹 Сайт Академии 🔹 Сайт Proglib
Please open Telegram to view this post
VIEW IN TELEGRAM
🥱3❤1👍1🤩1
Go в Data Engineering + Математика = 🚀
Go всё чаще используют для подготовки данных и высоконагруженных ML-сервисов. Но чтобы говорить на одном языке с Data Scientist'ами, нужно подтянуть математику.
Приглашаем на обновленный курс с живыми вебинарами. Разбираем линейную алгебру и алгоритмы «под капотом».
Что будет:
— работа с векторами и матрицами (база вычислений);
— реализация линейной регрессии и метода наименьших квадратов;
— SVD-разложение и снижение размерности данных.
—
Первый вебинар уже в записи, отзывы отличные.
Последний шанс попасть в поток (до 9.12):
https://clc.to/LojFzw
Go всё чаще используют для подготовки данных и высоконагруженных ML-сервисов. Но чтобы говорить на одном языке с Data Scientist'ами, нужно подтянуть математику.
Приглашаем на обновленный курс с живыми вебинарами. Разбираем линейную алгебру и алгоритмы «под капотом».
Что будет:
— работа с векторами и матрицами (база вычислений);
— реализация линейной регрессии и метода наименьших квадратов;
— SVD-разложение и снижение размерности данных.
—
Первый вебинар уже в записи, отзывы отличные.
Последний шанс попасть в поток (до 9.12):
https://clc.to/LojFzw
❤3🥱2
Если у вас уже есть REST API с OpenAPI схемой то библиотека openapi openai go позволяет почти напрямую подружить его с ChatGPT.
Она берёт описание вашего API из OpenAPI и сама превращает эндпоинты в функции которые понимает OpenAI SDK для Go.
Дальше всё выглядит так: чат генерирует вызов функции модель просит например get_pets с параметром limit равно 10 а библиотека под капотом отправляет обычный HTTP запрос к вашему сервису и возвращает ответ обратно в модель.
Вам не нужно руками описывать каждую функцию для ChatGPT достаточно поддерживать актуальную OpenAPI спецификацию.
🔹 Математика для разработки AI-моделей
🔹 Получить консультацию менеджера
🔹 Сайт Академии 🔹 Сайт Proglib
#GoToProduction
Please open Telegram to view this post
VIEW IN TELEGRAM
1❤4👍2
Каналы в Go уже сами по себе маленькие очереди внутри процесса. Они дают потокобезопасную доставку сообщений между горутинами и встроенное обратное давление когда потребитель не успевает читать.
Если у вас один бинарь без отдельных независимых потребителей и не требуется хранить сообщения после падения процесса то каналы закрывают большинство сценариев. Вы можете построить пайплайн обработки данных, генератор, фильтры, воркеры через цепочку каналов.
Классический пример — конвейер обработки данных. В Go его собирают из нескольких функций каждая принимает входной канал и возвращает выходной:
func generate(nums []int) <-chan int {
out := make(chan int)
go func() {
defer close(out)
for _, n := range nums {
out <- n
}
}()
return out
}
func square(in <-chan int) <-chan int {
out := make(chan int)
go func() {
defer close(out)
for n := range in {
out <- n * n
}
}()
return out
}
func main() {
in := generate([]int{1, 2, 3, 4})
out := square(in)
for n := range out {
fmt.Println(n)
}
}Такой конвейер легко поддерживать и тестировать. Если попробовать заменить его полноценным брокером с топиками получится больше конфигурации чем кода и в маленьком сервисе это будет оверхед.
🔹 Специалист по ИИ
🔹 Получить консультацию менеджера
🔹 Сайт Академии 🔹 Сайт Proglib
#GoToProduction
Please open Telegram to view this post
VIEW IN TELEGRAM
👍20❤3🌚1
Please open Telegram to view this post
VIEW IN TELEGRAM
💯20😁13❤2
📰 Первый дайджест декабря
Новый год на 7 дней ближе, а мы пока вспомним что за эти 7 дней произошло.
— JetBrains выпустили новую IDE
Ещё одна IDE с ИИ-агентом внутри. Сейчас доступен только Claude Agent, требуется подписка Anthropic. Поставить получится только на MacOS, а версию для Windows и Linux придётся подождать.
— Go 1.26 заморозили
— Nintendo 64 на Go
— Генератор статических страниц для Git-реп
— Go 1.25.5 и 1.24.11
— Устанавливаем федору на мак
🔹 Математика для Data Science
🔹 Получить консультацию менеджера
🔹 Сайт Академии 🔹 Сайт Proglib
🐸 Библиотека Go-разработчика
#GoLive
Новый год на 7 дней ближе, а мы пока вспомним что за эти 7 дней произошло.
— JetBrains выпустили новую IDE
Ещё одна IDE с ИИ-агентом внутри. Сейчас доступен только Claude Agent, требуется подписка Anthropic. Поставить получится только на MacOS, а версию для Windows и Linux придётся подождать.
— Go 1.26 заморозили
— Nintendo 64 на Go
— Генератор статических страниц для Git-реп
— Go 1.25.5 и 1.24.11
— Устанавливаем федору на мак
🔹 Математика для Data Science
🔹 Получить консультацию менеджера
🔹 Сайт Академии 🔹 Сайт Proglib
#GoLive
Please open Telegram to view this post
VIEW IN TELEGRAM
👾1
Forwarded from Библиотека задач по Go | тесты, код, задания
Please open Telegram to view this post
VIEW IN TELEGRAM
Forwarded from Библиотека задач по Go | тесты, код, задания
Anonymous Quiz
12%
Тест пройдёт успешно, выведет «Это выведется?» и «2»
51%
Тест завершится с FAILED, выведет «Это выведется?», но не выведет «2»
19%
Тест завершится с FAILED, выведет «Это выведется?», «Проверка 2» и «2»
18%
Тест завершится с FAILED, выведет «Это выведется?» и «2»
🤔8
Интересно, что хочет разработчик на Go. Может, вы хотите новый проект, повышение, апгрейд рабочего места или просто выспаться и никуда не спешить.
А кто-то мечтает о маленьком, но тёплом подарке — книге, мерче или уютном вечерке без задач из джиры.
🔹 Основы IT для непрограммистов
🔹 Получить консультацию менеджера
🔹 Сайт Академии 🔹 Сайт Proglib
#GoTalk
Please open Telegram to view this post
VIEW IN TELEGRAM
Сегодня разбираемся с ежедневной задачей из литкода — нам нужно посчитать количество троек чисел
(a, b, c) от 1 до n, для которых верно a²+b²=c². Это классические Пифагоровы тройки.Идея проста: перебираем все пары
(a, b), вычисляем сумму их квадратов и проверяем, является ли корень этой суммы целым числом не больше n. Если да, значит тройка валидна, увеличиваем счётчик.Компактное решение на Go:
for a := 1; a <= n; a++ {
for b := 1; b <= n; b++ {
sum := int64(a)*int64(a) + int64(b)*int64(b)
c := int(math.Sqrt(float64(sum)))
if c <= n && int64(c)*int64(c) == sum {
count++
}
}
}Такое решение вызовет лишь вопрос по времени выполнения. Есть решение куда быстрее, но для него нужно знать математику, которую можно подтянуть у нас на курсах.
🔹 Математика для Data Science
🔹 Получить консультацию менеджера
🔹 Сайт Академии 🔹 Сайт Proglib
#ReadySetGo
Please open Telegram to view this post
VIEW IN TELEGRAM
1🥱9👍5❤1🔥1🤔1
🛠 Используем deadcode для удаления неиспользуемых функций
В больших кодовых базах часто накапливаются функции, которые ни разу не вызываются — так называемый мёртвый код. Он усложняет поддержку: непонятно, можно ли смело удалять или менять такие функции.
Eсть утилита
Для запуска сканирования проекта используйте:
Инструмент выведет список мёртвого кода с указанием файлов и строк:
Если хотите понять, почему функция оказалась мёртвой, используйте флаг -whylive, который объяснит ее связь с остальной частью кода.
➡️ Документация
🔹 Алгоритмы и структуры данных
🔹 Получить консультацию менеджера
🔹 Сайт Академии 🔹 Сайт Proglib
🐸 Библиотека Go-разработчика
#GoToProduction
В больших кодовых базах часто накапливаются функции, которые ни разу не вызываются — так называемый мёртвый код. Он усложняет поддержку: непонятно, можно ли смело удалять или менять такие функции.
Eсть утилита
deadcode, которая помогает быстро находить и чистить неиспользуемые функции. Устанавливается она простой командой:go install golang.org/x/tools/cmd/deadcode@latest
Для запуска сканирования проекта используйте:
deadcode .
Инструмент выведет список мёртвого кода с указанием файлов и строк:
internal/params.go:34:6: unreachable func: WithUserRanking
internal/wallets.go:50:35 unreachable func: Transaction.CollectionName
internal/utilx/randomx/string.go:23:6: unreachable func: RandomAlphabet
Если хотите понять, почему функция оказалась мёртвой, используйте флаг -whylive, который объяснит ее связь с остальной частью кода.
🔹 Алгоритмы и структуры данных
🔹 Получить консультацию менеджера
🔹 Сайт Академии 🔹 Сайт Proglib
#GoToProduction
Please open Telegram to view this post
VIEW IN TELEGRAM
❤12👍7
Модель ошибок в Go простая — функции возвращают error, и вызывающий решает, что с ним делать. Проблема в том, что голое «вернуть наверх как есть» редко подходит для живой системы.
Когда несколько слоев кода просто пробрасывают err без описания контекста, в логах остается только формулировка из нижнего уровня. В распределенной системе это означает, что придется гадать в каком именно месте цепочки произошел сбой.
Решение — добавлять уровень контекста в каждом слое с помощью
fmt.Errorf("doing X for id=%s: %w", id, err). Так сохраняется исходная ошибка для errors.Is и errors.As и одновременно появляется понятное человеку сообщение.Для повторяющихся состояний полезно вводить именованные значения ошибок, чтобы логика могла различать их по типу, а логи оставались говорящими. В итоге, при чтении стека ошибок складывается понятный рассказ о том, что происходило.
Развёрнутый пример:
// Общая «смысловая» ошибка
var ErrTokenInvalid = errors.New("token invalid")
// Три разных места где может что то пойти не так
func parseToken(raw string) (Token error) {
const op = "parseToken"
t err := reallyParse(raw)
if err != nil {
return Token{} fmt.Errorf("%s: parse raw token failed: %w" op ErrTokenInvalid)
}
return t nil
}
func validateClaims(t Token) error {
const op = "validateClaims"
if time.Now().After(t.ExpiresAt) {
return fmt.Errorf("%s: token expired at %s: %w" op t.ExpiresAt ErrTokenInvalid)
}
if !t.HasScope("admin") {
return fmt.Errorf("%s: missing admin scope: %w" op ErrTokenInvalid)
}
return nil
}
func lookupSession(ctx context.Context store SessionStore t Token) (*Session error) {
const op = "lookupSession"
s err := store.GetByID(ctx t.SessionID)
if err != nil {
if errors.Is(err sql.ErrNoRows) {
return nil fmt.Errorf("%s: session %q not found: %w" op t.SessionID ErrTokenInvalid)
}
return nil fmt.Errorf("%s: load session %q failed: %w" op t.SessionID err)
}
return s nil
}
Можно спорить о синтаксисе и бойлерплейте, но без хороших сообщений и контекста ни один синтаксический сахар ситуацию не спасет.
🔹 Математика для Data Science
🔹 Получить консультацию менеджера
🔹 Сайт Академии 🔹 Сайт Proglib
#GoDeep
Please open Telegram to view this post
VIEW IN TELEGRAM
❤13👍7
MapStore — библиотека на Go для хранения данных в мапах прямо в файловой системе.
Поддерживает сменные кодеки сериализации, шифрование ключей через keyring ОС и полнотекстовый поиск по SQLite FTS5. Подходит для задач без внешних БД, где важна простота и локальность.
Каждый ключ сохраняется в отдельный файл с именем по UUIDv7, директории партиционированы для масштаба. Шифрование опциональное, использует системный keyring без лишних настроек.
🔹 Практический интенсив «Архитектуры и шаблоны проектирования»
🔹 Получить консультацию менеджера
🔹 Сайт Академии 🔹 Сайт Proglib
#GoDeep
Please open Telegram to view this post
VIEW IN TELEGRAM
❤4😁3
Forwarded from Библиотека программиста | программирование, кодинг, разработка
Летим зимовать ✈️
Когда холодает, айтишники пакуют чемоданы, а мы разыгрываем ваучер на 50 000 рублей в Островке.
Поехать к морю или остаться среди снежных пейзажей — выбирайте сами!
Чтобы участвовать, нужно оставить любую реакцию под этим постом и подписаться на каналы ниже:
😎 Типичный программист
🐸 Библиотека программиста
🟢 Ostrovok! Tech
Теперь осталось нажать на кнопку участия под этим постом и вы в игре!
Итоги подведём 12 декабря. Победителя выберем с помощью бота. Подробнее с правилами можно ознакомиться здесь.
Всем удачи!
Участников: 111
Призовых мест: 1
Дата розыгрыша: 19:00, 12.12.2025 MSK (3 дня)
Когда холодает, айтишники пакуют чемоданы, а мы разыгрываем ваучер на 50 000 рублей в Островке.
Поехать к морю или остаться среди снежных пейзажей — выбирайте сами!
Чтобы участвовать, нужно оставить любую реакцию под этим постом и подписаться на каналы ниже:
Теперь осталось нажать на кнопку участия под этим постом и вы в игре!
Итоги подведём 12 декабря. Победителя выберем с помощью бота. Подробнее с правилами можно ознакомиться здесь.
Всем удачи!
Участников: 111
Призовых мест: 1
Дата розыгрыша: 19:00, 12.12.2025 MSK (3 дня)
Please open Telegram to view this post
VIEW IN TELEGRAM
Вокруг высшего образования в IT до сих пор много мифов. Одни уверяют что Go разработчику хватит пет проектов на GitHub другие советуют не выходить на рынок без корочек.
🔹 ML для старта в Data Science
🔹 Получить консультацию менеджера
🔹 Сайт Академии 🔹 Сайт Proglib
Please open Telegram to view this post
VIEW IN TELEGRAM
👾1