Anonymous Poll
29%
Мемы
15%
Список сокращений
26%
Про кастомные ошибки
24%
Команды для работы с докером
37%
Поиск и устранение утечек
34%
Либа для OAuth
40%
Про небезопасные обращения к БД
37%
Про обработку ошибок
👍2
💻 ВАЖНО: макбук ещё не забрали!
Proglib.academy продолжает розыгрыш MacBook Pro 14» (M3 Pro, 36 Гб, 1 Тб SSD).
Что нужно для участия?
— Берёшь любой курс Академии до 15 ноября.
— Проходишь хотя бы 2 недели обучения (можно за два дня ).
— Пишешь куратору #розыгрыш. Всё — ты в игре!
Что за курсы?
▫️Алгоритмы и структуры данных — если хочешь готовиться к собесам в Яндекс, FAANG и не сидеть на джуне вечно.
▫️Архитектуры и шаблоны проектирования — учат думать как senior, а не просто писать код.
▫️ Python, математика для DS, основы IT и другие темы — можно стартовать с нуля или усилить то, что уже знаешь.
👉 Влетай, не думай!
Proglib.academy продолжает розыгрыш MacBook Pro 14» (M3 Pro, 36 Гб, 1 Тб SSD).
Что нужно для участия?
— Берёшь любой курс Академии до 15 ноября.
— Проходишь хотя бы 2 недели обучения (
— Пишешь куратору #розыгрыш. Всё — ты в игре!
Что за курсы?
▫️Алгоритмы и структуры данных — если хочешь готовиться к собесам в Яндекс, FAANG и не сидеть на джуне вечно.
▫️Архитектуры и шаблоны проектирования — учат думать как senior, а не просто писать код.
▫️ Python, математика для DS, основы IT и другие темы — можно стартовать с нуля или усилить то, что уже знаешь.
👉 Влетай, не думай!
🥱9😁2👍1👾1
Please open Telegram to view this post
VIEW IN TELEGRAM
😁36❤5🥱2
Многие начинающие Go-разработчики организуют проекты, разделяя файлы по типам — например, отдельные папки для моделей, обработчиков, утилит. Такая схема выглядит аккуратно:
/models
/utils
/handlers
Однако за этим скрываются проблемы: тесная связанность кода и круговые зависимости между пакетами.
Современный подход — разделять код по доменам и ответственности. Например, структура может выглядеть так:
/internal
/user
handler.go
service.go
repository.go
/pkg
/config
/logger
/cmd
/api
main.go
Это стандарт для крупных систем, таких как Uber или Cloudflare. Даже команда Go рекомендует именно такой подход.
#GoToProduction
Please open Telegram to view this post
VIEW IN TELEGRAM
❤29👍7🌚5⚡2😢2
💻 Хочешь MacBook Pro? Просто начни учиться!
Да-да, вы не ослышались: Proglib.academy дарит макбук за учёбу!
Всё просто:
— купи любой курс Академии до 15 ноября;
— пройди 2 недели обучения (можно за два дня);
— напиши куратору в чате курса хэштег #розыгрыш.
📚 Выбирай свой курс:
▫️ «Математика для DS» — для тех, кто хочет уверенно работать с данными;
▫️ «Основы Python» — чтобы начать писать код с нуля;
▫️ «Алгоритмы и структуры данных» — для будущих инженеров;
▫️ «AI-агенты» или «Машинное обучение» — для тех, кто хочет прокачаться в ИИ.
👉 Участвовать в розыгрыше
Да-да, вы не ослышались: Proglib.academy дарит макбук за учёбу!
Всё просто:
— купи любой курс Академии до 15 ноября;
— пройди 2 недели обучения (можно за два дня);
— напиши куратору в чате курса хэштег #розыгрыш.
📚 Выбирай свой курс:
▫️ «Математика для DS» — для тех, кто хочет уверенно работать с данными;
▫️ «Основы Python» — чтобы начать писать код с нуля;
▫️ «Алгоритмы и структуры данных» — для будущих инженеров;
▫️ «AI-агенты» или «Машинное обучение» — для тех, кто хочет прокачаться в ИИ.
👉 Участвовать в розыгрыше
👍1😁1
Go Developer — от 3 000 до 7 000 $
Middle GO разработчик на удалёнку
Джун Go разработчик — от 1 700 $
Golang-разработчик — от 200 000 ₽
#GoWork
Please open Telegram to view this post
VIEW IN TELEGRAM
❤4👍2
Дано n монет. Нужно выложить лестницу, где на i-й ступени ровно i монет. Вернуть количество полных рядов лестницы, которые удастся построить.
Наивный перебор даёт O(n), но попробуем быстрее:
func arrangeCoins(n int) int {
left, right := 0, n
for left <= right {
mid := left + (right-left)/2
sum := mid * (mid + 1) / 2
if sum == n {
return mid
}
if sum < n {
left = mid + 1
} else {
right = mid - 1
}
}
return right
}Вместо перебора каждого уровня, бинарный поиск за O(log n) найдёт точный ответ.
#ReadySetGo
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9
🛒 Black Friday от Proglib.academy!
Только до 30 ноября — скидка 40% на ВСЕ курсы.
Пора добавить в корзину не носки, а новые скиллы: Python, математика для Data Science, AI, алгоритмы и структуры данных, ML.
🎓 Выбирай курс, который реально двинет тебя в карьере, и учись со скидкой.
👉 Учиться со скидкой
Только до 30 ноября — скидка 40% на ВСЕ курсы.
Пора добавить в корзину не носки, а новые скиллы: Python, математика для Data Science, AI, алгоритмы и структуры данных, ML.
🎓 Выбирай курс, который реально двинет тебя в карьере, и учись со скидкой.
👉 Учиться со скидкой
👍1
Anvil — CLI для управления конфигурациями и установкой инструментов
Если надоело тратить кучу времени на настройку рабочего окружения под Go и сопутствующие инструменты, обратите внимание на Anvil. Это консольный инструмент, написанный на Go, который позволяет быстро ставить нужные приложения и синхронизировать конфиги между машинами.
Anvil умеет устанавливать пакеты группами или по отдельности, например, можно за один раз поставить весь набор для разработки. Есть возможность импортировать группы приложений из публичных или приватных репозиториев, а еще встроена диагностика состояния окружения с автопоправкой проблем.
#GoToProduction
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7
Представьте, что у вас есть приложение с тремя версиями: бесплатной, Pro и Enterprise. В бесплатной — базовый набор функций, в Pro — добавляем новую, а в Enterprise — ещё одну сверху.
В Go есть механизм build tags. Он позволяет управлять тем, какие файлы попадут в сборку.
Основной файл для Free версии может выглядеть так:
package main
import "fmt"
var features = []string{"A", "B"}
func main() {
for _, s := range features {
fmt.Println(s)
}
}
Два базовых функционала уже есть. Теперь создаём новый файл pro.go и добавляем туда функцию для Pro версии, но так, чтобы она включалась только при сборке с тегом pro:
//go:build pro
package main
func init() {
features = append(features, "C")
}
И для Enterprise версии можно сложить условия — пусть файл с функцией D будет собираться только если установлены оба тега pro и enterprise:
//go:build pro && enterprise
package main
func init() {
features = append(features, "D")
}
Собираем версии так:
go build -o free .
go build -o pro -tags=pro .
go build -o enterprise -tags=pro,enterprise .
Если раньше вы обходились константами или сложными if, попробуйте этот подход.
#GoDeep
Please open Telegram to view this post
VIEW IN TELEGRAM
👍23❤10⚡1👏1🤔1
🔄 Обновление httpcache до версии 1.3.0
Httpcache — это библиотека для кеширования HTTP-ответов. Она работает как слой между клиентом и сервером, чтобы хранить копии ответов и выдавать их повторно при одинаковых запросах.
В свежем релизе httpcache 1.3.0 много новых возможностей:
1. Поддержка новых кеширующих вариантов:
• MongoDB с пулом
• Hazelcast для распределённого
• NATS JetStream KV для лёгкого кеширования
• PostgreSQL с бенчмарками
• FreeCache — высокопроизводительный кеш в памяти
2. Добавлена обёртка для кэшированных данных с поддержкой gzip, brotli и snappy
3. Добавлена поддержка AES-256-GCM шифрования (SecureCache) с динамическим размером nonce
В новых версиях зона применения расширилась благодаря поддержке популярных баз данных и распределённых систем хранения.
➡️ Release notes
🐸 Библиотека Go-разработчика
#GoLive
Httpcache — это библиотека для кеширования HTTP-ответов. Она работает как слой между клиентом и сервером, чтобы хранить копии ответов и выдавать их повторно при одинаковых запросах.
В свежем релизе httpcache 1.3.0 много новых возможностей:
1. Поддержка новых кеширующих вариантов:
• MongoDB с пулом
• Hazelcast для распределённого
• NATS JetStream KV для лёгкого кеширования
• PostgreSQL с бенчмарками
• FreeCache — высокопроизводительный кеш в памяти
2. Добавлена обёртка для кэшированных данных с поддержкой gzip, brotli и snappy
3. Добавлена поддержка AES-256-GCM шифрования (SecureCache) с динамическим размером nonce
В новых версиях зона применения расширилась благодаря поддержке популярных баз данных и распределённых систем хранения.
#GoLive
Please open Telegram to view this post
VIEW IN TELEGRAM
❤4👍4
Времена жизни и управление памятью в Rust
Borrow checker, lifetimes и владение — три кита, на которых держится безопасность Rust. На открытом вебинаре курса OTUS Rust Developer. Professional Илья Богданов объяснит, как работает управление памятью под капотом и почему Rust предотвращает целые классы ошибок ещё на этапе компиляции.
📌 19 ноября, 20:00
Времена жизни и управление памятью в Rust
— move, borrow и copy: как устроена система владения
— lifetimes и зачем нужны апострофы в коде
— borrow checker без страха и боли
— как проектировать API с правильными lifetime’ами
Вебинар бесплатный и будет полезен как начинающим, так и опытным разработчикам на Rust, а также программистам на C/C++, которые хотят понять, как создавать безопасный и эффективный код без сборщика мусора.
👉 Зарегистрироваться: https://clc.to/gwfBrA
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru
Borrow checker, lifetimes и владение — три кита, на которых держится безопасность Rust. На открытом вебинаре курса OTUS Rust Developer. Professional Илья Богданов объяснит, как работает управление памятью под капотом и почему Rust предотвращает целые классы ошибок ещё на этапе компиляции.
📌 19 ноября, 20:00
Времена жизни и управление памятью в Rust
— move, borrow и copy: как устроена система владения
— lifetimes и зачем нужны апострофы в коде
— borrow checker без страха и боли
— как проектировать API с правильными lifetime’ами
Вебинар бесплатный и будет полезен как начинающим, так и опытным разработчикам на Rust, а также программистам на C/C++, которые хотят понять, как создавать безопасный и эффективный код без сборщика мусора.
👉 Зарегистрироваться: https://clc.to/gwfBrA
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru
😁4❤1
Важно научиться читать вакансии между строк и понимать, какие обязанности и условия действительно вас ждут. Например, «гибкий график» часто означает ненормированный рабочий день и ночные созвоны. А «карьерный рост» — это прорастить себя самому среди хаоса и авралов.
Чтобы не попасть в ловушку, стоит задавать работодателю конкретные вопросы о задачах, отпуске, оплате и культуре компании. Так можно избежать сюрпризов и выбрать действительно комфортное место работы.
Please open Telegram to view this post
VIEW IN TELEGRAM
🛠 Почему ваши горутины — это бомбы замедленного действия
Все мы это делали:
Запустил пару горутин — и вроде всё работает. Но на деле вы только что создали две бомбы.
Эти горутины не имеют ни надзора, ни обработки ошибок, ни пути к корректному завершению.
Ошибка №1: Fire-and-forget goroutines
Кажется, элегантно: не блокируем ответ, всё асинхронно.
Проблема в том, что эта горутина безответственная. Что если sendNotification упадёт в панике? Что если она зависнет навсегда? Что если сервер перезапустится? Уведомления потеряются.
Лучше вместо простого
Ошибка №2: Безграничный параллелизм
Пока пользователей немного — всё в порядке.
Но когда их 100 тысяч, начинается война за CPU, база задушена, API заблокирован.
Решение — worker pool. Ограничиваем количество горутин, получаем предсказуемую нагрузку:
или ещё проще — через errgroup:
Так код становится контролируемым, безопасным и дебажимым.
🐸 Библиотека Go-разработчика
#GoDeep
Все мы это делали:
func main() {
go doSomething()
go doSomethingElse()
time.Sleep(time.Second)
}Запустил пару горутин — и вроде всё работает. Но на деле вы только что создали две бомбы.
Эти горутины не имеют ни надзора, ни обработки ошибок, ни пути к корректному завершению.
Ошибка №1: Fire-and-forget goroutines
func handleRequest(w http.ResponseWriter, r *http.Request) {
data := processData(r.Body)
go sendNotification(data)
w.WriteHeader(http.StatusOK)
}Кажется, элегантно: не блокируем ответ, всё асинхронно.
Проблема в том, что эта горутина безответственная. Что если sendNotification упадёт в панике? Что если она зависнет навсегда? Что если сервер перезапустится? Уведомления потеряются.
Лучше вместо простого
go sendNotification(data) сделать воркер с очередью задач, который запускает ограниченное число горутин:type Worker struct {
queue chan Notification
wg sync.WaitGroup
}
func (w *Worker) Start(ctx context.Context) {
for i := 0; i < 5; i++ {
w.wg.Add(1)
go func() {
defer w.wg.Done()
for {
select {
case n, ok := <-w.queue:
if !ok {
return
}
if err := sendNotification(n); err != nil {
log.Println("Error:", err)
}
case <-ctx.Done():
return
}
}
}()
}
}
func (w *Worker) Shutdown() {
close(w.queue)
w.wg.Wait()
}Ошибка №2: Безграничный параллелизм
func processUsers(users []User) {
for _, user := range users {
go processUser(user)
}
}Пока пользователей немного — всё в порядке.
Но когда их 100 тысяч, начинается война за CPU, база задушена, API заблокирован.
Решение — worker pool. Ограничиваем количество горутин, получаем предсказуемую нагрузку:
numWorkers := runtime.NumCPU()
jobs := make(chan User)
//стартуем обработку и ждём, пока все отработают
или ещё проще — через errgroup:
g, ctx := errgroup.WithContext(context.Background())
g.SetLimit(10)
Так код становится контролируемым, безопасным и дебажимым.
#GoDeep
Please open Telegram to view this post
VIEW IN TELEGRAM
👍25❤3
В одном из российских вузов начали учить студентов программированию на кириллице. JavaScript перевели полностью: теперь вместо function — «функция», вместо if — «если», и ни одной латинской буквы в коде.
Представим себе го на кириллице:
пакет главная
включить "fmt"
функция главная() {
fmt.Напечатать("Привет, мир!")
}
Стиль лаконичен, даже в русском варианте. Только вот другая проблема — Go держится на простоте синтаксиса и мощной экосистеме инструментов, где всё, от gofmt до go mod, завязано на английский.
Локализованный синтаксис может подойти в учебных целях — помочь новичкам понять базовую структуру программы без языкового барьера. Но профессиональный мир Go построен на международных стандартах, где слово interface несёт не только смысл, но и культурный код сообщества.
💬 Напишите свой последний код на кириллице в комментах 👇
#GoTalk
Please open Telegram to view this post
VIEW IN TELEGRAM
😁36🥱11👾4😢1🌚1
В мире Go и не только merge‑конфликты — частая головная боль для разработчиков. Стандартный алгоритм слияния в Git работает построчно, что приводит к конфликтам даже в тех случаях, когда изменения не пересекаются логически.
Mergiraf — средство для синтаксически осознанного слияния, которое решает эту проблему.
Mergiraf анализирует исходный код с помощью библиотеки tree-sitter, которая строит дерево синтаксических элементов. Это позволяет инструменту понимать структуру кода и автоматически разрешать многие конфликты, которые обычный line-based merge не способен обработать.
В тестах на коде ядра Linux Mergiraf успешно автоматически решил сотни конфликтов, экономя время и нервы программистов.
#GoToProduction
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥13👍6❤4
Первые страницы джоб-бордов переполнены, а фильтры показывают ненужные позиции. Булевый поиск помогает работать с логикой и находить вакансии от стартапов и компаний, которые не публикуют вакансии напрямую.
Используя простые операторы и правильные запросы, можно искать нужные вакансии по стэку, уровню и условиям, исключать стажировки и фильтровать язык описания.
Please open Telegram to view this post
VIEW IN TELEGRAM
Дана строка из символов. Требуется найти длину самой длинной подстроки, в которой все символы встречаются только один раз подряд. Иными словами — ищем максимально уникальный фрагмент строки.
Пример:
abcabcbb → 3 (abc)
bbbbb → 1 (b)
pwwkew → 3 (wke или kew)
Решение. Используем скользящее окно и мапу для отслеживания последних позиций:
func lengthOfLongestSubstring(s string) int {
m := make(map[rune]int)
maxLen, left := 0, 0
for right, ch := range s {
if idx, ok := m[ch]; ok && idx >= left {
left = idx + 1
}
m[ch] = right
if curLen := right - left + 1; curLen > maxLen {
maxLen = curLen
}
}
return maxLen
}left — старт окна, right — конец. Если символ “повторился” (уже был в окне), двигаем left — выкидываем всё до текущего повторяющегося символа.
Асимптотика: O(n), где n — длина строки.
#ReadySetGo
Please open Telegram to view this post
VIEW IN TELEGRAM
❤11👍4
📘 Хочешь в Data Science, но есть пробелы в знаниях математики?
Мы сделали экспресс-курс «Математика для Data Science», который за 2 месяца даст тебе фундамент, без которого ни одна ML-модель не взлетит 🚀
Что тебя ждёт:
🔹 живые вебинары с экспертами (НИУ ВШЭ, SberAI, Wildberries&Russ);
🔹 практика в Python, квизы и проверка заданий экспертами;
🔹 матрицы, регрессии, вероятности и статистика: всё на примерах из реальных задач;
🔹 старт — 4 декабря.
🔥 Не упусти халяву: сейчас 40% до 30 ноября
👉 Записаться на курс
Мы сделали экспресс-курс «Математика для Data Science», который за 2 месяца даст тебе фундамент, без которого ни одна ML-модель не взлетит 🚀
Что тебя ждёт:
🔹 живые вебинары с экспертами (НИУ ВШЭ, SberAI, Wildberries&Russ);
🔹 практика в Python, квизы и проверка заданий экспертами;
🔹 матрицы, регрессии, вероятности и статистика: всё на примерах из реальных задач;
🔹 старт — 4 декабря.
🔥 Не упусти халяву: сейчас 40% до 30 ноября
👉 Записаться на курс
Пакет unsafe в Go — это инструмент, который позволяет обходить систему безопасности типов языка. Он не гарантирует обратную совместимость и используется для специальных задач, таких как оптимизации и взаимодействие с Cи.
В видео подробно про функции, примеры оптимизаций и предостережения об осторожном обращении с unsafe из-за угрозы безопасности и стабильности программ.
#GoDeep
Please open Telegram to view this post
VIEW IN TELEGRAM
🤔1