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

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

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

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

РКН: https://gosuslugi.ru/snet/67a4a8c2468
Download Telegram
⚡️ Go + gRPC = скорость

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

Шаги для реализации микросервиса с gRPC в Go

1. Установка

Чтобы начать работать с gRPC в Go, сначала установим нужные инструменты. Для генерации кода нам понадобится protoc и два плагина к нему: protoc-gen-go и protoc-gen-go-grpc.
apt install -y protobuf-compiler
go install google.golang.org/protobuf/cmd/protoc-gen-go@latest
go install google.golang.org/grpc/cmd/protoc-gen-go-grpc@latest


2. Создаём файл .proto для определения сервисов:
syntax = "proto3";

option go_package = "path/to/your/go/package;package_name"; // Путь к вашему Go пакету

service UserService {
rpc GetUser (UserRequest) returns (UserResponse);
}

message UserRequest {
string id = 1;
}

message UserResponse {
string name = 1;
string email = 2;
}


3. Теперь, когда все установлено, сгенерируйте код с помощью команды:
protoc --go_out=. --go-grpc_out=. user.proto


Эта команда сгенерирует два файла: user.pb.go и user_grpc.pb.go, которые будут содержать необходимый код для работы с сообщениями и gRPC-методами.

4. Реализация сервера и клиента для обмена данными

Сервер:
type server struct {
pb.UnimplementedUserServiceServer
}

func (s *server) GetUser(ctx context.Context, req *pb.UserRequest) (*pb.UserResponse, error) {
return &pb.UserResponse{Name: "John Doe", Email: "[email protected]"}, nil
}

func main() {
lis, err := net.Listen("tcp", ":50051")
if err != nil {
log.Fatalf("failed to listen: %v", err)
}

s := grpc.NewServer()
pb.RegisterUserServiceServer(s, &server{})
fmt.Println("Server started on :50051")
if err := s.Serve(lis); err != nil {
log.Fatalf("failed to serve: %v", err)
}
}


Клиент:
func main() {
conn, err := grpc.Dial(":50051", grpc.WithInsecure())
if err != nil {
log.Fatalf("could not connect: %v", err)
}
defer conn.Close()

c := pb.NewUserServiceClient(conn)
resp, err := c.GetUser(context.Background(), &pb.UserRequest{Id: "123"})
if err != nil {
log.Fatalf("could not get user: %v", err)
}

fmt.Printf("User: %s, Email: %s\n", resp.Name, resp.Email)
}


Теперь ваш первый микросервис с gRPC готов.

🐸Библиотека Go-разработчика #буст
Please open Telegram to view this post
VIEW IN TELEGRAM
👍21🥱53😁1
⭐️ Проектируем как CTO

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

Промпт:
Проектируй детальную архитектуру проекта «ТЕМА ПРОЕКТА» с учётом следующих функций: [СПИСОК ФУНКЦИЙ]. Опиши ключевые модули, их взаимодействия (с использованием схем или диаграмм, если возможно), технологии для каждого компонента, а также обоснование выбора архитектурного стиля. Особое внимание удели масштабируемости, обеспечению безопасности и возможным ограничениям. Базовый язык программирования – Go, остальные технологии и инструменты выбирай самостоятельно, аргументируя выбор. Структурируй ответ по разделам: 1) Ключевые модули; 2) Взаимодействие модулей; 3) Используемые технологии; 4) Обоснование архитектурного стиля; 5) Масштабируемость и безопасность; 6) Ограничения и риски.


🐸Библиотека Go-разработчика #буст
Please open Telegram to view this post
VIEW IN TELEGRAM
🌚11👍6😢4😁3🤩1
🫣 Боитесь математики в ML?

Думаете, для этого нужно вспоминать университетские интегралы и решать сложные уравнения?

У нас хорошая новость: машинное обучение — это в первую очередь инженерная практика, а не математическая олимпиада. Здесь важнее понимать суть, а не выводить формулы.

Именно на таком подходе — через логику, интуицию и наглядные примеры — и построен наш курс «ML для старта в Data Science», где мы объясняем всё на пальцах, без боли и зубрёжки.

Регистрируйтесь, пока есть свободные места 😉
2
This media is not supported in your browser
VIEW IN TELEGRAM
💃 Как взять задачи посерьёзнее

Почему одним достаются крутые фичи, а вы — снова на багфиксе. Именно с такой историей пришёл к нам подписчик:
Работаю в команде больше года. Почти все ключевые и интересные задачи уходят к сеньорам. Мне достаются мелкие доработки, баги и то, что «надо кому-то сделать». Сначала думал, что это временно. Что делать, чтобы перейти на более серьёзный уровень и не застрять в рутине?


Если вы молча делаете своё и не выходите за рамки текущих задач, команду устраивает, что вы «надёжный исполнитель».

Хотите большего — начните показывать больше: идеи, инициативу, участие в обсуждениях, собственные предложения.

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

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

💬 Что вы делали для того, чтобы взять задачку покруче? Делитесь опытом в комментариях 👇

🐸Библиотека Go-разработчика #междусобойчик
Please open Telegram to view this post
VIEW IN TELEGRAM
👍81
Proglib Academy — это место, где вы превращаете теорию в практику. Здесь ваши знания становятся проектами для портфолио, а вы — более уверенным специалистом.

Выберите курс, который поможет сделать следующий шаг ⬇️

🚀 Для тех, кто начинает путь в IT:

Основы IT для непрограммистов
Программирование на Python (обновлённый)
Frontend-разработчик с нуля: HTML, CSS, JavaScript

🧠 Для будущих и настоящих Data Scientist'ов:

ML для старта в Data Science (начинается в сентябре)
Базовые модели ML и приложения
Математика для Data Science
AI-агенты для DS-специалистов (скоро второй поток)

🛠️ Для опытных разработчиков, готовых к росту:

Алгоритмы и структуры данных
Архитектуры и шаблоны проектирования

Независимо от вашей цели, у нас есть курс, который поможет её достичь. Переходите в Proglib Academy, выбирайте свой путь и инвестируйте в навыки, которые всегда будут в цене!
⭐️ Третий кандидат на релиз Go 1.25

Go‑команда представила Go 1.25 RC3. Посмотрим что там внутри.

Два важных фикс-патча, связанных с безопасностью:

• Функция LookPath могла возвращать неожиданные пути, если переменная PATH содержит исполняемые файлы вместо директорий и строчки "", "." или ".." передаются в LookPath.

• При отмене запроса Rows.Scan в случае параллельных запросов было возможна гонка — Scan может вернуть данные другого запроса или ошибку.

Как установить и попробовать:
go install golang.org/dl/go1.25rc3@latest  
go1.25rc3 download


➡️ Анонс от разрабов

🐸Библиотека Go-разработчика #свежак
Please open Telegram to view this post
VIEW IN TELEGRAM
11👍2
💰 Сколько ты стоишь как разработчик

В переговорах о зарплате нет ничего хуже, чем назвать цифру «с потолка» и потом узнать, что рынок готов был платить больше.

Чтобы не гадать, а опираться на факты, есть три проверенных подхода. В статье — пошагово о каждом методе, с конкретными источниками и советами.

➡️ Читать статью

🐸Библиотека Go-разработчика
Please open Telegram to view this post
VIEW IN TELEGRAM
🧐 Зоопарк моделей в ML: с чего начать?

Открываешь статью по машинному обучению — и в тебя летят слова: трансформеры, бустинги, SVM, регрессии.

Кажется, придётся учить всё это, иначе в ML не пустят.

Хорошая новость: 90% задач можно закрыть 2–3 классическими методами. Разберёшь их — уже сможешь собирать работающие проекты. А хайповые названия подождут.

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

👉 Успей попасть на курс «ML для старта в Data Science»
4
📰 Go дайджест Go разработчикам

Собрали для вас материалы прошедшей недели.

Обновления Go 1.24 и 1.23

В обоих минорных обновлениях закрыта уязвимость в database/sql, из-за которой Rows.Scan мог возвращать некорректные результаты. Исправлен баг в os/exec LookPath при обработке пустой строки, «.» и «..» в PATH.

Интерфейсы позволяют составлять поведение, не наследуя

Размышление на тему отличия Go от других языков программирования. В Go используется композиция интерфейсов — вместо массивных иерархий типов. Интерфейсы легко встраиваются друг в друга, позволяя гибко комбинировать функциональность.

Свежий Cup o’ Go

В новом эпизоде подкаста ведущие обсуждают важные обновления вокруг Go: выпуски Go 1.24.6 и 1.23.12, Microsoft-версию Go Telemetry и обнаружение Supply Chain‑атаки через Go-модуль в GitLab.

Go 1.25 rc3

🐸Библиотека Go-разработчика #свежак
Please open Telegram to view this post
VIEW IN TELEGRAM
1👍1
Яндекс создаёт продукты и сервисы для миллионов пользователей. Нейросетевой поиск, умные устройства, машинный перевод — задачи, где нет готовых решений.

Поэтому нам нужны сильные бэкенд-разработчики! Если у вас от 5 лет опыта на C++, Python, Java или Go — участвуйте в Мультитреке.

Как это работает
• Подаёте заявку до 18 августа
• Проходите технические секции 23 и 24 августа
• Получаете офер 24 августа

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

Узнайте подробности и оставьте заявку.
🥱6👾21
😀 Топ-вакансий для Go-разработчиков за неделю

Golang-разработчик — 250 000 — 400 000 ₽, удалённо (Москва).

Golang Developer — Офис (Москва).

Golang-разработчик — 270 000 — 485 000 ₽, удалённо (Москва).

Golang Developer — от 250 000 до 600 000 ₽, удалённо (Владивосток).

Бустер — удалённо (не только Москва)

➡️ Еще больше топовых вакансий — в нашем канале Go jobs
Please open Telegram to view this post
VIEW IN TELEGRAM
🎉32
🛠 Как реализовать паттерн Singleflight

Паттерн Singleflight позволяет предотвратить выполнение одинаковых операций несколькими горутинами одновременно.

Это полезно, когда несколько горутин запрашивают одни и те же данные или выполняют одинаковые дорогостоящие операции.

В Go существует встроенная реализация этого паттерна в пакете golang.org/x/sync/singleflight

Пример реализации:

Используем singleflight.Group для предотвращения дублирующихся запросов:
package main

import (
"fmt"
"log"
"time"
"golang.org/x/sync/singleflight"
)

var g singleflight.Group

// Дорогая операция
func expensiveOperation(key string) (interface{}, error) {
fmt.Println("Выполняем операцию для:", key)
time.Sleep(2 * time.Second)
return fmt.Sprintf("Результат для %s", key), nil
}

func main() {
key := "operation1"

// Выполнение операции с использованием Singleflight
result, err, _ := g.Do(key, func() (interface{}, error) {
return expensiveOperation(key)
})
if err != nil {
log.Fatal(err)
}

fmt.Println(result)

// Запуск нескольких горутин с одинаковым ключом
for i := 0; i < 3; i++ {
go func() {
res, err, _ := g.Do(key, func() (interface{}, error) {
return expensiveOperation(key)
})
if err != nil {
log.Fatal(err)
}
fmt.Println(res)
}()
}

// Ожидаем завершения горутин
time.Sleep(3 * time.Second)
}


singleflight.Group гарантирует, что для каждого ключа будет выполнена только одна операция, даже если несколько горутин одновременно попытаются выполнить одинаковую операцию.

Остальные горутины просто ждут завершения работы первой и получают тот же результат.

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

#буст
Please open Telegram to view this post
VIEW IN TELEGRAM
104👍1
Офлайн-митап Peer To Beer x Точка Банк: приходите слушать доклады и делиться своими историями

🍉 15 августа в Москве пройдёт митап для Python и Go-разработчиков. В программе доклады, открытый микрофон и нетворкинг-активности, которые организаторы подготовили вместе с Точка Банк — так что знакомства будут нескучными и позволят не только весело провести вечер, но и получше узнать друг друга.

🐤 Доклады
Юрий Маркин, Х5. Тернистый путь из Python в Golang
Поделюсь личным опытом работы с Golang, разбирая как его сильные стороны, так и аспекты, которые можно улучшить. Обсудим минимализм в дизайне, особенности defer, работу с горутинами и многое другое, с акцентом на баланс между плюсами и минусами.

Сурен Хоренян, ВК Реклама. А правда, что Golang быстрее Python?
Расскажу свой опыт работы с Go, и почему с высоты многолетнего опыта на Python мне выглядит странным большое внимание к Go в мире веб-разработки.

🐥 Открытый микрофон
Рассказывайте любую историю из любой сферы за 3 минуты: весёлую, странную, полезную. Приз достаётся тому, кому громче аплодируют.

‼️ Нетворкинг и тематические настолки
Будут знакомства, но нестандартные. Возможно, придётся жестами показывать прокси-сервер.

🥳Регистрация
После регистрации анкета пройдёт модерацию — собирают специалистов со схожим опытом, чтобы на нетворкинге всем было интересно.

📅 Когда: 15 августа, пятница. Старт регистрации в 19:00
📍Место: спот в районе станции метро Чистые пруды, детали отправят после подтверждения регистрации

Приходите, чтобы август запомнился не только арбузами и песнями Стрыкало.
Регистрируйтесь в боте @peertobeer_bot
Please open Telegram to view this post
VIEW IN TELEGRAM
2
😊 Совет начинающим

Привет, go-сообщество. С чего бы вы начали свой путь, если бы только начали изучать этот язык с нуля?

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

Делитесь своими советами в комментариях 👇


P.S. Если хотите задать вопрос сообществу или поделиться историей, заполните нашу гугл-форму.

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

#междусобойчик
Please open Telegram to view this post
VIEW IN TELEGRAM
🔄 Свежий релиз GoLand

GoLand 2025.2 от JetBrains уже доступен, и в нем есть несколько действительно крутых обновлений.

Теперь GoLand помогает избежать ошибок с nil на ранних стадиях. Он анализирует, как значения nil передаются через функции, и предупреждает, если есть шанс на ошибку.

Экран приветствия теперь не блокирует работу — он открывается как вкладка, так что можно сразу же использовать терминал, Docker или HTTP-клиент.

Junie стал еще умнее и быстрее. Он теперь поддерживает MCP, что открывает новые возможности для подключения к внешним источникам данных и API.

Поддержка golangci-lint версии 2 была улучшена, так что теперь анализ кода проходит быстрее и точнее.

➡️ Подробнее про обновление

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

#свежак
Please open Telegram to view this post
VIEW IN TELEGRAM
🥰9🥱32🤔1