Библиотека Go-разработчика | Golang
23.4K subscribers
2.28K photos
46 videos
87 files
4.68K links
Все самое полезное для Go-разработчика в одном канале.

По рекламе: @proglib_adv

Учиться у нас: https://proglib.io/w/32d20779

Для обратной связи: @proglibrary_feeedback_bot

РКН: https://gosuslugi.ru/snet/67a4a8c2468
Download Telegram
💻 ВАЖНО: макбук ещё не забрали!

Proglib.academy продолжает розыгрыш MacBook Pro 14» (M3 Pro, 36 Гб, 1 Тб SSD).

Что нужно для участия?

— Берёшь любой курс Академии до 15 ноября.
— Проходишь хотя бы 2 недели обучения (можно за два дня).
— Пишешь куратору #розыгрыш. Всё — ты в игре!

Что за курсы?

▫️Алгоритмы и структуры данных — если хочешь готовиться к собесам в Яндекс, FAANG и не сидеть на джуне вечно.

▫️Архитектуры и шаблоны проектирования — учат думать как senior, а не просто писать код.

▫️ Python, математика для DS, основы IT и другие темы — можно стартовать с нуля или усилить то, что уже знаешь.

👉 Влетай, не думай!
🥱9😁2👍1👾1
⚙️ Структура кода в Go: от папок к доменам

Многие начинающие Go-разработчики организуют проекты, разделяя файлы по типам — например, отдельные папки для моделей, обработчиков, утилит. Такая схема выглядит аккуратно:
/models
/utils
/handlers


Однако за этим скрываются проблемы: тесная связанность кода и круговые зависимости между пакетами.

Современный подход — разделять код по доменам и ответственности. Например, структура может выглядеть так:
/internal
/user
handler.go
service.go
repository.go
/pkg
/config
/logger
/cmd
/api
main.go


Это стандарт для крупных систем, таких как Uber или Cloudflare. Даже команда Go рекомендует именно такой подход.

🐸 Библиотека Go-разработчика

#GoToProduction
Please open Telegram to view this post
VIEW IN TELEGRAM
29👍7🌚52😢2
💻 Хочешь MacBook Pro? Просто начни учиться!

Да-да, вы не ослышались: Proglib.academy дарит макбук за учёбу!

Всё просто:

— купи любой курс Академии до 15 ноября;
— пройди 2 недели обучения (можно за два дня);
— напиши куратору в чате курса хэштег #розыгрыш.

📚 Выбирай свой курс:

▫️ «Математика для DS» — для тех, кто хочет уверенно работать с данными;
▫️ «Основы Python» — чтобы начать писать код с нуля;
▫️ «Алгоритмы и структуры данных» — для будущих инженеров;
▫️ «AI-агенты» или «Машинное обучение» — для тех, кто хочет прокачаться в ИИ.

👉 Участвовать в розыгрыше
👍1😁1
💰 Топ-вакансий для Go-разработчиков за неделю

Go Developer — от 3 000 до 7 000 $

Middle GO разработчик на удалёнку

Джун Go разработчик — от 1 700 $

Golang-разработчик — от 200 000 ₽

➡️ Еще больше топовых вакансий — в нашем канале Go jobs

🐸 Библиотека Go-разработчика

#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) найдёт точный ответ.

🐸 Библиотека Go-разработчика

#ReadySetGo
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9
🛒 Black Friday от Proglib.academy!

Только до 30 ноября — скидка 40% на ВСЕ курсы.

Пора добавить в корзину не носки, а новые скиллы: Python, математика для Data Science, AI, алгоритмы и структуры данных, ML.

🎓 Выбирай курс, который реально двинет тебя в карьере, и учись со скидкой.

👉 Учиться со скидкой
👍1
⚙️ Быстрая настройка dev-окружения

Anvil — CLI для управления конфигурациями и установкой инструментов

Если надоело тратить кучу времени на настройку рабочего окружения под Go и сопутствующие инструменты, обратите внимание на Anvil. Это консольный инструмент, написанный на Go, который позволяет быстро ставить нужные приложения и синхронизировать конфиги между машинами.

Anvil умеет устанавливать пакеты группами или по отдельности, например, можно за один раз поставить весь набор для разработки. Есть возможность импортировать группы приложений из публичных или приватных репозиториев, а еще встроена диагностика состояния окружения с автопоправкой проблем.

➡️ Репозиторий Anvil

🐸 Библиотека Go-разработчика

#GoToProduction
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7
👨‍💻 Как управлять версиями Go-приложения

Представьте, что у вас есть приложение с тремя версиями: бесплатной, 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, попробуйте этот подход.

🐸 Библиотека Go-разработчика

#GoDeep
Please open Telegram to view this post
VIEW IN TELEGRAM
👍23101👏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
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
😁41
⚠️ Что значит гибкий график и возможность роста в IT-вакансиях на самом деле

Важно научиться читать вакансии между строк и понимать, какие обязанности и условия действительно вас ждут. Например, «гибкий график» часто означает ненормированный рабочий день и ночные созвоны. А «карьерный рост» — это прорастить себя самому среди хаоса и авралов.

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

➡️ Узнать, что работодатели имеют в виду

🐸 Библиотека Go-разработчика
Please open Telegram to view this post
VIEW IN TELEGRAM
🛠 Почему ваши горутины — это бомбы замедленного действия

Все мы это делали:
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)


Так код становится контролируемым, безопасным и дебажимым.

🐸 Библиотека Go-разработчика

#GoDeep
Please open Telegram to view this post
VIEW IN TELEGRAM
👍253
👨‍💻 Когда Go станет «Го»

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

Представим себе го на кириллице:
пакет главная

включить "fmt"

функция главная() {
fmt.Напечатать("Привет, мир!")
}


Стиль лаконичен, даже в русском варианте. Только вот другая проблема — Go держится на простоте синтаксиса и мощной экосистеме инструментов, где всё, от gofmt до go mod, завязано на английский.

Локализованный синтаксис может подойти в учебных целях — помочь новичкам понять базовую структуру программы без языкового барьера. Но профессиональный мир Go построен на международных стандартах, где слово interface несёт не только смысл, но и культурный код сообщества.

💬 Напишите свой последний код на кириллице в комментах 👇

🐸 Библиотека Go-разработчика

#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 успешно автоматически решил сотни конфликтов, экономя время и нервы программистов.

➡️ Попробовать инструмент

🐸 Библиотека Go-разработчика

#GoToProduction
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥13👍64
⚡️ Как найти скрытые вакансии в LinkedIn, GitHub и Google

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

Используя простые операторы и правильные запросы, можно искать нужные вакансии по стэку, уровню и условиям, исключать стажировки и фильтровать язык описания.

➡️ Найдите вакансии, которые скрыты от других

🐸 Библиотека Go-разработчика
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 — длина строки.

🐸 Библиотека Go-разработчика

#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 ноября

👉 Записаться на курс
👀 Оптимизации и трюки с пакетом unsafe

Пакет unsafe в Go — это инструмент, который позволяет обходить систему безопасности типов языка. Он не гарантирует обратную совместимость и используется для специальных задач, таких как оптимизации и взаимодействие с Cи.

В видео подробно про функции, примеры оптимизаций и предостережения об осторожном обращении с unsafe из-за угрозы безопасности и стабильности программ.

🐸 Библиотека Go-разработчика

#GoDeep
Please open Telegram to view this post
VIEW IN TELEGRAM
🤔1