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

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

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

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

РКН: https://gosuslugi.ru/snet/67a4a8c2468
Download Telegram
Самые полезные каналы для программистов в одной подборке!

Сохраняйте себе, чтобы не потерять 💾

🔥Для всех

Библиотека программиста — новости, статьи, досуг, фундаментальные темы
Книги для программистов
IT-мемы
Proglib Academy — тут мы рассказываем про обучение и курсы
Азбука айтишника — здесь мы познаем азы из мира программирования

🤖Про нейросети
Библиотека робототехники и беспилотников | Роботы, ИИ, интернет вещей
Библиотека нейрозвука | Транскрибация, синтез речи, ИИ-музыка
Библиотека нейротекста | ChatGPT, Gemini, Bing
Библиотека нейровидео | Sora AI, Runway ML, дипфейки
Библиотека нейрокартинок | Midjourney, DALL-E, Stable Diffusion

#️⃣C#

Книги для шарпистов | C#, .NET, F#
Библиотека шарписта — полезные статьи, новости и обучающие материалы по C#
Библиотека задач по C# — код, квизы и тесты
Библиотека собеса по C# — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
Вакансии по C#, .NET, Unity Вакансии по PHP, Symfony, Laravel

☁️DevOps

Библиотека devops’а — полезные статьи, новости и обучающие материалы по DevOps
Вакансии по DevOps & SRE
Библиотека задач по DevOps — код, квизы и тесты
Библиотека собеса по DevOps — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования

🐘PHP

Библиотека пхпшника — полезные статьи, новости и обучающие материалы по PHP
Вакансии по PHP, Symfony, Laravel
Библиотека PHP для собеса — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
Библиотека задач по PHP — код, квизы и тесты

🐍Python

Библиотека питониста — полезные статьи, новости и обучающие материалы по Python
Вакансии по питону, Django, Flask
Библиотека Python для собеса — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
Библиотека задач по Python — код, квизы и тесты

Java

Книги для джавистов | Java
Библиотека джависта — полезные статьи по Java, новости и обучающие материалы
Библиотека Java для собеса — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
Библиотека задач по Java — код, квизы и тесты
Вакансии для java-разработчиков

👾Data Science

Книги для дата сайентистов | Data Science
Библиотека Data Science — полезные статьи, новости и обучающие материалы по Data Science
Библиотека Data Science для собеса — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
Библиотека задач по Data Science — код, квизы и тесты
Вакансии по Data Science, анализу данных, аналитике, искусственному интеллекту

🦫Go

Книги для Go разработчиков
Библиотека Go разработчика — полезные статьи, новости и обучающие материалы по Go
Библиотека Go для собеса — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
Библиотека задач по Go — код, квизы и тесты
Вакансии по Go

🧠C++

Книги для C/C++ разработчиков
Библиотека C/C++ разработчика — полезные статьи, новости и обучающие материалы по C++
Библиотека C++ для собеса — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
Библиотека задач по C++ — код, квизы и тесты
Вакансии по C++

💻Другие каналы

Библиотека фронтендера
Библиотека мобильного разработчика
Библиотека хакера
Библиотека тестировщика
Вакансии по фронтенду, джаваскрипт, React, Angular, Vue
Вакансии для мобильных разработчиков
Вакансии по QA тестированию
InfoSec Jobs — вакансии по информационной безопасности
Библиотека разработчика игр | Gamedev, Unity, Unreal Engine

📁Чтобы добавить папку с нашими каналами, нажмите 👉сюда👈

Также у нас есть боты:
Бот с IT-вакансиями
Бот с мероприятиями в сфере IT

Мы в других соцсетях:
🔸VK
🔸YouTube
🔸Дзен
🔸Facebook *
🔸Instagram *

* Организация Meta запрещена на территории РФ
📊 Как себя чувствует IT-рынок в 2025 году?

Друзья, запускаем важное исследование рынка труда в IT!

Нам очень важно понять:
• Как изменились зарплаты
• Что происходит с наймом
• Есть ли сокращения или рост

🔐 Опрос полностью анонимный
⏱️ Займёт всего 3-5 минут
📈 Результаты опубликуем в подробной статье

Ваши ответы помогут составить реальную картину происходящего в индустрии.

👉 Пройти опрос
⚙️ Переход с React на WebAssembly

Компания Dagger решила сделать смелый шаг — полностью заменить фронтенд на React с TypeScript на Go с WebAssembly.

Почему отказались от React

• Две кодовые базы (TypeScript для фронтенда и Go для бекенда) замедляли разработку и усложняли поддержку.

• Несогласованность логики: приходилось дублировать бизнес-логику между Go и TypeScript.

• Зависимость от фронтенд-стека: сложности в поиске разработчиков с опытом React.

Как реализовали новый интерфейс

1. Использовали Go-app — фреймворк для создания PWA на Go.

2. Перенесли бизнес-логику из React в Go, избегая двойного кода.

3. Настроили сборку под WebAssembly для запуска Go-кода прямо в браузере

В результате время выпуска новых фич сократилось на треть.

➡️ Подробнее в блоге компании

🐸Библиотека Go разработчика
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥205👾4👍3🎉2
😳 Если бы языки программирования были девушками

Выбрать язык — всё равно что найти идеального партнера. Кто-то западает на строгую типизацию, кто-то ищет простоту и гибкость, а некоторые готовы углубиться в самые сложные алгоритмы отношений.

Мы заглянули в Тиндер разработчика и нашли там Go. Как вам? 😏

Еще больше прекрасных дам языков программирования — в нашем канале Библиотека программиста.

Свайпайте и выбирайте свой мэтч ❤️

🐸Библиотека Go разработчика
Please open Telegram to view this post
VIEW IN TELEGRAM
10🥱5😢3🥰1
🛠 CQRS и паттерн «Репозиторий»

Перепутанные SQL-запросы, сложный рефакторинг и отсутствие тестируемости — частые проблемы монолитных приложений.

Решить их помогают проверенные архитектурные паттерны: CQRS, который разделяет чтение и запись, и паттерн «Репозиторий», который упрощает работу с базой

Что такое CQRS

CQRS (Command Query Responsibility Segregation) — это архитектурный паттерн, который разделяет операции чтения и записи. Вместо одного интерфейса для всех операций мы получаем две независимые модели.

Пример интерфейсов:
// Интерфейс для записи
type UserCommand interface {
Create(user *User) error
Update(user *User) error
Delete(id int) error
}

// Интерфейс для чтения
type UserQuery interface {
GetByID(id int) (*User, error)
ListAll() ([]*User, error)
}


Что такое паттерн «Репозиторий»

Паттерн «Репозиторий» — это слой между бизнес-логикой и источником данных. Он инкапсулирует логику доступа к базе и предоставляет простой интерфейс для работы с данными.

Пример паттерна «Репозиторий»:

type UserRepository interface {
GetByID(id int) (*User, error)
Create(user *User) error
Update(user *User) error
Delete(id int) error
}

Такой интерфейс можно реализовать для разных источников данных — in-memory, MSSQL, PostgreSQL или Redis.

CQRS — это официант, который принимает заказы, а «Репозиторий» — повар. Главное — чтобы заказ не завис на «кухне»... или в deadlock’е.

🖇 Подробнее об этих подходах

🐸Библиотека Go разработчика
Please open Telegram to view this post
VIEW IN TELEGRAM
🥱16👍10😁21
🐳 Делаем конкурента DeepSeek R1-Zero на домашней пекарне: метод GRPO в Unsloth

Обычно LLM требуют мощных GPU, но теперь даже на видеокарте с ограниченной памятью можно обучать модели логического рассуждения.

💡 Фишка — новый алгоритм GRPO, который позволяет моделям развивать логическое мышление без вмешательства человека.

Подробнее в нашей статье: https://proglib.io/sh/MyBCbq9is5
👍42
🌳 Бинарное дерево поиска (BST) в Go

BST — это бинарное дерево, где:

• Значение в левой ветви меньше значения в узле.

• Значение в правой ветви больше значения в узле.

Такое свойство обеспечивает эффективный поиск, вставку и удаление — в среднем за O(log n).

Пример реализации:
// Node — узел бинарного дерева
type Node struct {
Value int
Left *Node
Right *Node
}

// Insert — вставка нового значения в дерево
func (n *Node) Insert(value int) {
if value < n.Value {
if n.Left == nil {
n.Left = &Node{Value: value}
} else {
n.Left.Insert(value)
}
} else if value > n.Value {
if n.Right == nil {
n.Right = &Node{Value: value}
} else {
n.Right.Insert(value)
}
}
}

// Search — поиск значения в дереве
func (n *Node) Search(value int) *Node {
if n == nil {
return nil
}
if n.Value == value {
return n
} else if value < n.Value {
return n.Left.Search(value)
} else {
return n.Right.Search(value)
}
}

// InOrderTraversal — обход дерева в порядке (LNR)
func (n *Node) InOrderTraversal() {
if n == nil {
return
}
n.Left.InOrderTraversal()
fmt.Print(n.Value, " ")
n.Right.InOrderTraversal()
}


Как это работает?

1️⃣ Вставка:

• Если значение меньше текущего узла, идём в левое поддерево.

• Если больше — в правое.

• Если узел пуст, создаём новый.

2️⃣ Поиск:

• Сравниваем искомое значение с текущим.

• Меньше — идём влево, больше — вправо, равное — нашли.

3️⃣ Обход:

• In-order обход (LNR) обходит узлы в отсортированном порядке.

💬 А вы уже реализовали BST? Делитесь опытом и вопросами в комментариях!

🐸Библиотека Go разработчика
Please open Telegram to view this post
VIEW IN TELEGRAM
19👍17🥱4😁2
⚠️ В машинном обучении, как в любви: слишком идеальные предсказания – это подозрительно!

Когда модель слишком прилипчива к тренировочным данным, результат оказывается… ну, как в отношениях, когда всё кажется идеальным, но реальность ломает сердце.

Оверфиттинг (Overfitting) – модель так хорошо запомнила тренировочные данные, что на реальных данных начинает путаться.
💔 В любви: «Я выбрал идеального партнёра по профилю, а в жизни выяснилось, что его «идеальность» – всего лишь иллюзия!»

Андерфиттинг (Underfitting) – модель обучена настолько поверхностно, что предсказывает мэтчи случайным образом.
💔 В любви: «Мне нравятся только люди с именем Александр, а всех остальных я даже не замечаю – бедный фильтр!»

Неправильный выбор фичей (Feature Selection Fail) – если модель опирается на неважные признаки, она предсказывает мэтчи хуже случайности.
💔 В любви: «Ты любишь авокадо? Значит, мы созданы друг для друга!» – а потом оказывается, что это вовсе не про важное.

🎯 На вебинаре мы разобрали, как избежать этих ошибок и создать работающую модель для speed dating, которая на самом деле помогает находить любовь! Вчера мы не просто говорили о любви – мы её предсказывали!

🔥 Спасибо всем, кто был с нами и участвовал!

💘 Как же это было?

Если ты пропустил вебинар или хочешь пересмотреть запись – просто перейди по [ссылке] и получи видео 😉
🥱4👾4
📢 Где «выстрелит» твой стартап: 8 площадок для запуска и продвижения IT-проекта

Собрали для тебя проверенные места, где можно бесплатно показать свой продукт первым пользователям и даже найти инвестора. Работает как для зарубежного, так и для российского рынка.

👍 Ссылка на статью: https://proglib.io/sh/LrcFGsnuyU
👍3
🎧 Подкаст Cup o' Go #100 — вечеринка в честь релиза Go 1.24

Обсудили ключевые изменения в Go 1.24, работу с SQL NULL и компиляцию shell-скриптов в бинарники.

Не обошлось без докладов с GopherCon и новостей об окончании поддержки Go 1.14-1.19.

🖇 Слушать обсуждение новостей

🐸Библиотека Go разработчика #подкаст
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6
⚡️ Софт-скиллы, которые выведут карьеру в IT на новый уровень

Многие говорят о лидерстве, коммуникации и умении презентовать себя. Но будущее требует других навыков. Разбираем неочевидные soft skills, которые помогут прокачаться в IT и за рубежом.

➡️ Что внутри

▪️ Эмоциональный интеллект

▪️ Умение упрощать

▪️ Антихрупкость

▪️ Мультикультурность

▪️ Предпринимательское мышление


Эти навыки решают. Кто хочет оставаться в топе — развиваемся уже сейчас.

🔵 Подтяните свои знания о машинном обучении вместе с нашим курсом «Базовые модели ML и приложения»

🔗 Читать статью
Please open Telegram to view this post
VIEW IN TELEGRAM
🥱52👍2🔥1
🏭 WebAssembly: новые возможности в Go 1.24

Go 1.24 добавляет директиву go:wasmexport, упрощая экспорт функций в WebAssembly и улучшая взаимодействие с WASI.

Теперь можно создавать WASI-реакторы для многократных вызовов без переинициализации — идеально для долгоживущих WASM-приложений.

➡️ Подробнее на go.dev

🐸Библиотека Go разработчика
Please open Telegram to view this post
VIEW IN TELEGRAM
👍183
🔠 Погружение в UTF-8

Раньше ASCII поддерживал только 128 символов. UTF-8 решил эту проблему, используя 1–4 байта для кодирования символов Unicode. Go, ориентированный на современные веб-приложения, встроил поддержку UTF-8 на базовом уровне.

Работа с UTF-8 в Go:

В Go строки — это срезы байтов. Это значит, что функция len()покажет длину в байтах, а не количество символов. Чтобы правильно работать с UTF-8, Go предоставляет пакет unicode/utf8:
import "unicode/utf8"

func main() {
str := "Hello, 世界"
fmt.Println("Bytes:", len(str))
fmt.Println("Runes:", utf8.RuneCountInString(str))
}

Результат покажет, что len() выдаст 13 байтов, хотя символов всего 9. Это потому, что 世界 занимает по 3 байта каждый.

Ошибки и подводные камни:

Одна из распространённых ошибок — неверное предположение, что каждый символ занимает 1 байт. При обрезке строк или подсчёте символов важно использовать utf8-функции.

Также стоит помнить о валидации. Функция utf8.Valid() поможет убедиться, что данные корректны:
if !utf8.Valid(data) {
log.Fatal("Invalid UTF-8 data")
}


📎 Подробнее про UTF-8 в Go

🐸Библиотека Go разработчика
Please open Telegram to view this post
VIEW IN TELEGRAM
👍263
💬 TCP-чат на Go

TCP обеспечивает передачу данных без потерь — идеальный выбор для чата. В Go есть встроенный пакет net, который работает с TCP-соединениями.

Основные шаги:

1️⃣ Создание TCP-сервера: используем net.Listen() для ожидания подключений.

2️⃣ Обработка клиентов: каждое подключение — отдельная горутина.

3️⃣ Передача сообщений: Сервер читает сообщения и рассылает их другим клиентам.

4️⃣ Управление подключениями: Нужно учитывать отключения и ошибки.

TCP-чат на Go — отличный проект, чтобы понять сетевое программирование, горутины и каналы.

📎 Подробное руководство со всеми примерами

🐸Библиотека Go разработчика
Please open Telegram to view this post
VIEW IN TELEGRAM
👍17🔥7🥱6
🔤 Многоточие в Go

Многоточие (...) в Go — инструмент, который делает язык более гибким и удобным для работы с функциями, принимающими переменное количество аргументов.

Разберемся, как и где его использовать.

Вариативные Функции

Основное применение многоточия в Go — это определение вариативных функций. Такие функции могут принимать любое количество аргументов. Пример:
func example(args ...int) {
for _, arg := range args {
fmt.Println(arg)
}
}


Вызывать эту функцию можно с разным количеством аргументов:
example(1, 2, 3)
example(4, 5, 6, 7, 8)


Передача Срезов

Многоточие позволяет передавать срезы в вариативные функции. Это удобно, когда у вас уже есть срез, и вы хотите передать его элементы в функцию. Пример:
slice := []int{1, 2, 3}
example(slice...)


Командная Строка

В командной строке Go многоточие используется как подстановочный знак, обозначающий "всё в этой директории и всех поддиректориях". Это упрощает выполнение команд для всех файлов в проекте.

Вариативные Интерфейсы

Многоточие можно использовать с интерфейсами для создания вариативных интерфейсов, что позволяет функциям принимать аргументы различных типов.

Пример:
func printAll(args ...interface{}) {
for _, arg := range args {
fmt.Println(arg)
}
}


Вызов функции:
printAll(1, "string", 3.14)


🐸Библиотека Go разработчика
Please open Telegram to view this post
VIEW IN TELEGRAM
👍21🔥42😁1👾1
🔐 Google OAuth 2.0 в Go и React.js

OAuth 2.0 — популярный протокол аутентификации, который позволяет безопасно работать с аккаунтами Google. Сейчас разберём как настроить проект с его использованием.

Настройка Google Cloud:

Создайте OAuth-клиент в Google Cloud Console. Сохраните client_id и client_secret.

Бэкенд на Go:

Используйте пакет golang.org/x/oauth2.

Настройте маршруты: /login, /callback, /logout.

Храните access_token и refresh_token в httpOnly cookies.

Пример:

conf := &oauth2.Config{ClientID: "...", RedirectURL: "..."}
url := conf.AuthCodeURL("state")


Фронтенд на React:

Создайте AuthProvider с контекстом.

Настройте Axios-интерцепторы для обновления токенов:
axios.interceptors.response.use(resp => resp, async error => { ... });


Ошибки и нюансы:

• Используйте httpOnly cookies для безопасности.

• Не храните client_secret на фронтенде.

• Обновляйте токены до их истечения, чтобы избежать разлогина пользователей.

📎 Подробный гайд с кодом

🐸 Канал Go-разработчика
Please open Telegram to view this post
VIEW IN TELEGRAM
👍73👏2
Вакансии «Библиотеки программиста» — ждем вас в команде!

Мы постоянно растем и развиваемся, поэтому создали отдельную страницу, на которой будут размещены наши актуальные вакансии. Сейчас мы ищем:
👉контент-менеджеров для ведения телеграм-каналов

Подробности тут

Мы предлагаем частичную занятость и полностью удаленный формат работы — можно совмещать с основной и находиться в любом месте🌴

Ждем ваших откликов 👾
👍4
⭐️ Starskey – быстрая key-value база данных на Go

Starskey – это key-value хранилище, написанное на Go. Оно основано на концепции LSM-дерева (log-structured merge tree).

Преимущества:
Cкорость работы — оптимизированная запись и чтение с помощью LSM-дерева.

ACID-транзакции обеспечивают целостность данных.

Удаление «мусорных» ключей — автоматическая компактификация на уровнях базы.

Минимальные зависимости — лёгкая интеграция в проекты на Go.

Пример:
package main

import (
"fmt"
"log"

"github.com/starskey-io/starskey"
)

func main() {
// Открываем или создаём новую базу
db, err := starskey.Open("data.db", nil)
if err != nil {
log.Fatal(err)
}
defer db.Close()

// Записываем данные
err = db.Put([]byte("username"), []byte("admin"))
if err != nil {
log.Fatal(err)
}

// Читаем данные
value, err := db.Get([]byte("username"))
if err != nil {
log.Fatal(err)
}
fmt.Println("Username:", string(value))
}


Starskey подходит для встроенных решений, кеширования, локального хранения данных и даже небольших NoSQL-баз.

📎 Подробнее о проекте

🐸 Канал Go-разработчика
Please open Telegram to view this post
VIEW IN TELEGRAM
👾10👍3
🎮 Minecraft на Go

Мы нашли полноценную игру в стиле Minecraft, написанную на Go с OpenGL.

Этот проект – пример чистого кода и глубокого понимания 3D-графики, физики и генерации мира.

Как запустить

1. Склонируйте репозиторий
git clone https://github.com/GianlucaP106/minecraft && cd minecraft


2. Запустите
go run .


Это не просто игра, а учебный материал для тех, кто хочет изучить разработку 3D-игр без движков.

➡️ Репозиторий проекта на GitHub

🐸 Канал Go-разработчика
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥24👾14👍7
🌻 Мапа со швейцарской таблицей

В Go 1.24 map реализован с использованием швейцарской таблицы (Swiss Table). Разберёмся, что это значит для разработчиков и как это влияет на производительность.

Что такое швейцарская таблица

Швейцарская таблица – это продвинутый алгоритм хеш-таблиц, разработанный Google для библиотеки Abseil. Она отличается высокой плотностью хранения данных и уменьшенной нагрузкой на кеш процессора.

Главные фишки:

• Компактное представление — хранит метаданные ключей рядом с хешами, что сокращает использование памяти.

• Эффективное разрешение коллизий — используется пробирование с SIMD: процессор обрабатывает сразу несколько элементов одновременно.

• Быстрое сканирование — поиск ключей стал намного быстрее за счёт оптимизированных операций.

Мапа в Go теперь занимает на 15-25% меньше памяти, а производительность ускорилась на 5-15%. Если в вашем коде активно используется map, он автоматически станет быстрее, потому что внешне ничего не поменялось.

➡️ Подробности реализации новой map

🐸 Канал Go-разработчика
Please open Telegram to view this post
VIEW IN TELEGRAM
👍54🔥123