Golang Books
16.6K subscribers
276 photos
3 videos
334 files
264 links
Библиотека Golang разработчика

По всем вопросам- @haarrp

@Golang_google - Golang

@golangl - golang chat

@GolangJobsit - golang channel jobs

@golangtests golang tests

@itchannels_telegram - 🔥лучшие ит-каналы

№ 5032829002
Download Telegram
🚀 Go в American Express: как язык покорил финтех‑гиганта

С 2016 года инженеры AmEx внедряют Go в масштабные продакшн‑системы. Вот 7 ключевых инсайтов из их опыта:

///text
1. Go Modules теперь полностью решают dependency‑хаос — даже за корпоративным прокси.

2. Конкурентность — мощная, но коварная. Goroutines → да, но с контролем: context, defer, sync и обязат@golang_booksельный -race в тестах.

3. В обучение вложились серьёзно: тренинги, менторство и своя документация по idiomatic Go.

4. Golden Framework — единый шаблон с логгингом, graceful shutdown, health‑checks и observability по умолчанию.

5. Производительность контролируется через встроенные инструменты: pprof, бенчмарки, GC‑паузы — всё под рукой.

6. Observability first: метрики, логгирование и трейсинг легко интегрируются в общую платформу мониторинга.

7. Сообщество внутри: 1000+ инженеров в активных каналах, общие практики и постоянные митапы.
///

📌 А ещё Go прошёл Language Showdown: 140 000 req/s — быстрее Node.js, Java и почти вровень с C++. Это и стало поворотной точкой.

📎 Подробнее: https://americanexpress.io/go-at-american-express-today/

@golang_books
🔥14😁42🥰2👍1
Почему в Go нельзя полагаться на системное время?

В этой разобрали интересный кейс: монотоное и «стеночное» время (monotonic vs wall clock) в Go.

🔍 В чём проблема?
time.Now() в Go возвращает смешанное время:
— *монотоное* (для измерений)
— *реальное «стеночное»* (часы системы)

Если неправильно использовать это время в вычислениях (например, при сравнении таймштампов), можно получить неожиданные баги:
— прыжки при изменении системных часов
— некорректные таймауты и дедлайны
— рассинхрон в распределённых системах

💡 Рекомендация: для измерений использовать монотоное время (`Since`, `Until`), а для логов и меток — преобразовывать только wall clock.

📌 Пример:


start := time.Now()
time.Sleep(5 * time.Second)
elapsed := time.Since(start) // работает корректно, потому что Go использует монотоное время


Но если сохранить time.Time в лог или БД и потом пересчитать разницу:


start := time.Now()

// сохраняем start куда-то...

// позже:
elapsed := time.Now().Sub(start) // здесь может быть ошибка!


Если за это время системное время изменилось (например, ntpd подвинуло часы), elapsed может быть отрицательным или неверным.

💣 В распределённых системах это особенно опасно:

- Неправильные таймауты
- Нарушение дедлайнов
- Отказ retry‑механизмов

📌 Полный разбор
👍218🔥1🥰1
Forwarded from Golang
👣 concurrency.rocks — интерактивный учебник с паттернами конкурентности Go

Внутри:
- Минималистичный симулятор горутин и каналов прямо в браузере
- Работает через Go WebAssembly — никакого сервера не требуется
- Наглядно объяснены select, fan-in/fan-out, worker pool, таймауты и про
- Код можно редактировать на лету

Сохрани в закладки и тренируй мышление «конкурентного» Go-разработчика:

https://concurrency.rocks

#golang

@golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥235👍5
💣 Вечные споры о структуре Go-проектов: где правда?

В Go-сообществе регулярно всплывает один и тот же вопрос: «Как правильно организовать репозиторий?» Старые блоги предлагают сложные структуры, а официальный гайд от Go team многим кажется слишком абстрактным.

Автор этой статьи предлагает радикально простой подход: не усложняйте, пока в этом нет реальной необходимости. Он советует начать с минимальной структуры, расширять её по мере роста проекта и не бояться переделывать.

Большинству проектов попросту не нужны ни internal/, ни pkg/, ни даже cmd/, особенно если вы пишете небольшой сервис или утилиту.

В Go-сообществе ценится простота, и добавление лишних слоев в структуру проекта противоречит этой философии.

🔗https://laurentsv.com/blog/2024/10/19/no-nonsense-go-package-layout.html

@golang_google
12👍9🔥5
🖥 Теперь писать сложные промты самому не обязательно — OpenAI выпустили генератор, который превращает даже простой запрос в подробную инструкцию для ИИ.

Принцип простой: описываете, что хотите получить, нажимаете Optimize — GPT-5 анализирует запрос и выдаёт готовый детализированный промт. Работает бесплатно.

Инструмент может упростить работу с любыми нейросетями, особенно если у вас нет опыта в составлении промтов.

Готовый вы можете сразу попробовать в @Chatgpturbobot
Please open Telegram to view this post
VIEW IN TELEGRAM
6👍4😁3🤬1
Яндекс создаёт продукты и сервисы для миллионов пользователей. Нейросетевой поиск, умные устройства, машинный перевод — задачи, где нет готовых решений.

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

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

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

Узнайте подробности и оставьте заявку.
😁54🔥2🥰2
🚀 Вышел Go 1.25 — полгода работы Google и сообщества.

Go сочетает скорость компилируемых языков с простотой скриптовых: лаконичный синтаксис, быстрый цикл разработки, защита от ошибок. Код компилируется в нативные бинарники без виртуальной машины, с интеграцией инструментов профилирования и отладки. Язык изначально оптимизирован под многопоточность и многоядерные системы, включая встроенные средства параллельных вычислений, безопасную работу с памятью и сборщик мусора.

🔹 Главные новшества:
- Экспериментальный GC greenteagc — до 10–40% меньше накладных расходов при создании и сканировании мелких объектов.
- Новые экспериментальные пакеты:
- encoding/json/v2 — переработанная, высокопроизводительная реализация encoding/json.
- encoding/json/jsontext — низкоуровневая обработка синтаксиса JSON.
- Новый пакет testing/synctest для тестирования синхронизации потоков.
- В go build по умолчанию включена опция -asan для проверки утечек памяти.
- В go vet добавлены анализаторы waitgroup и hostport для поиска ошибок в sync.WaitGroup.Add и форматировании адресов.
- GOMAXPROCS теперь учитывает ограничения CPU в контейнерах.
- Компилятор и линковщик научились генерировать отладочную информацию в формате DWARF5 (компактнее и эффективнее).

- Release notes: https://go.dev/doc/go1.25
- Скачать: https://go.dev/dl/#go1.25.0
🔥117👍5😁1
Forwarded from Golang
📘 "Go 101" популярная серия бесплатных книг обновлена под новую версию Golang 1.25 — сразу в четырёх разделах:

🚀 Go Optimizations 101: https://go101.org/optimizations/101.html
💡 Go Details & Tips 101: https://go101.org/details-and-tips/101.html
🔧 Go Generics 101: https://go101.org/generics/101.html
📖 Go 101: https://go101.org/article/101.html

@golang_google

#golang #freebook #education #book #go
8👍8🔥3🥰1
Как упорядочить код на Go и сделать его масштабируемым? 

➡️ На открытом уроке 20 августа в 20:00 МСК мы разберём, что такое пакеты в Go, как правильно организовывать структуру папок и работать с модулями.

❗️Вы получите знания о том, как избежать частых ошибок и эффективно использовать Go в реальных проектах.

🔴 Присоединяйтесь к открытому вебинару «Golang Developer. Basic»: https://tglink.io/c8810226e6d9?erid=2W5zFHykW48

Реклама. ООО "ОТУС ОНЛАЙН-ОБРАЗОВАНИЕ". ИНН 9705100963.
2
Forwarded from Golang
💥 Необычное поведение структур

В недавнем блоге Мэтта Холла поднята важная деталь, о которой некоторые забывают.

Автор показывает, что при встраивании (`embedding`) структур Go может выбрать неочевидное поле, даже если кажется, что это вызовет ошибку.

Пример:


type FooService struct { URL string }
type BarConnectionOptions struct { URL string }
type BarService struct { BarConnectionOptions }
type Options struct {
FooService
BarService
}

opts := Options{
FooService: FooService{URL: "abc.com"},
BarService: BarService{
BarConnectionOptions: BarConnectionOptions{URL: "xyz.com"},
},
}
fmt.Println(opts.URL)


Вы думаете, тут компиляция не пройдёт из-за неоднозначности?

Но, она завершится успешна — и начпечатает abc.com.

Go выбирает наименее вложенное поле URL, в данном случае FooService.URL.

Урок: будьте осторожны с struct embedding! Переиспользование полей может скрывать баги, особенно когда поля именованы одинаково, а уровни вложенности различны.

📌 Пост

@golang_google

#golang #go
👍6😁4