TGViewer
Cross Join - канал о разработке Cross Join - канал о разработке @crossjoin · 3.83K subscribers
Post #191 2.01K
Go 1.21 - аттракцион невиданной щедрости (версия выйдет уже через месяц -другой)

Я уже писал про работу со слайсами и мапами в 1.21 (теперь можно из коробки найти элемент в списке!!!!111111). Т.е. не прошло и 10 лет, как стандартная библиотека наполнилась самыми необходимыми, самыми базовыми функциями. Я чуть не разрыдался от счастья.

Так вот, недавно туда же включили и нормальный логгер!

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

Его никто не использует, потому что они ничего не может. В итоге у всех в проектах появились сторонние решения zerolog, logrus и т.д.

В новой версии Go добавили пакет log/slog (игра слов: slog переводится как "вкалывать", "утомительный"), в котором есть:

- уровни severity: Debug, Info, Warn, Error (или можно использовать любое integer-число)

- возможность использовать Handler: textHandler, jsonHandler или свой собственный, удовлетворяющий интерфейсу Handler

- встроенная возможность передачи ключ-значение:

// здесь message - это "hello",
// и еще приделывается ключ-значение count=3
logger.Info("hello", "count", 3)

если использовать вместе с json-хандлером, то вывод будет такой:

{"time":"2022-11-08T15:28:26.000000000-05:00","level":"INFO","msg":"hello","count":3}

- эти ключи-значения можно группировать, и получать вложенный джейсон (slog.Group)

- можно выводить лог с контекстом
// slog.InfoCtx(ctx, "message", "key", val)

- всякие фишечки для удобства и производительности, например метод With, который возвращает sub-логгер, при создании которого можно сразу задать некоторые атрибуты. Встроенные хандлеры отформатируют их один раз.

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

Кстати, все эти нововведения стали возможны благодаря тому, что в 1.19 сделали дженерики. Даже если они в продуктовом коде большинству не нужны, то для общих библиотек - must have
  • 👍 2
  • 💩 1
More from @crossjoin
  1. Oct 2, 2026Теперь у нас у всех есть простой способ поддерживать знание иностранного языка. Просто раз…
  2. Oct 2, 2026Вышел NATS Server 2.15.0 Самое важное: • Надёжнее работа JetStream-кластера. Масштабирован…
  3. Sep 29, 2026😱 Отправили свое резюме на 129 вакансий на хх, а в ответ тишина .. Думаете, что дело в ры…
  4. Sep 28, 2026Слышал недавно в каком-то подкасте мысль, что Haskell плохо подходит для вайбкодинга прост…
  5. Sep 26, 2026Антон Жиянов написал мини-книгу по Go-concurrency. Это что-то вроде плотного конспекта с и…
  6. Sep 22, 2026photo post
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →