Golang Books
16.6K subscribers
266 photos
4 videos
334 files
259 links
Библиотека Golang разработчика

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

@Golang_google - Golang

@golangl - golang chat

@GolangJobsit - golang channel jobs

@golangtests golang tests

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

№ 5032829002
Download Telegram
Почему в 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
🔥20👍54
💣 Вечные споры о структуре Go-проектов: где правда?

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

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

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

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

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

@golang_google
10👍8🔥5