ch
Feedback
Golang

Golang

前往频道在 Telegram

📈 Telegram 频道 Golang 的分析概览

频道 Golang (@golang_google) 俄语 语言赛道中的 是活跃参与者。目前社区聚集了 40 253 名订阅者,在 技术与应用 类别中位列第 3 368,并在 俄罗斯 地区排名第 15 840

📊 受众指标与增长动态

невідомо 创建以来,项目保持高速增长,吸引了 40 253 名订阅者。

根据 30 六月, 2026 的最新数据,频道保持稳定运转。过去 30 天订阅人数变化为 -146,过去 24 小时变化为 -6,整体触达仍然可观。

  • 认证状态: 未认证
  • 互动率 (ER): 平均受众互动率为 23.50%。内容发布后 24 小时内通常能获得 8.79% 的反应,占订阅者总量。
  • 帖子覆盖: 每篇帖子平均可获得 9 460 次浏览,首日通常累积 3 537 次浏览。
  • 互动与反馈: 受众积极参与,单帖平均反应数为 37
  • 主题关注点: 内容集中在 golang, api, devops, github, аллокация 等核心主题上。

📝 描述与内容策略

作者将该频道定位为表达主观观点的平台:
admin - @haarrp https://t.me/golangl - golang чат https://t.me/golangtests go тесты https://t.me/ai_machinelearning_big_data машинное обучение @itchannels_telegram РКН: clck.ru/3Fmx3s #VRHSZ

凭借高频更新(最新数据采集于 01 七月, 2026),频道始终保持新鲜度与高覆盖。分析显示受众积极互动,使其成为 技术与应用 类别中的关键影响点。

40 253
订阅者
-624 小时
-357
-14630
吸引订阅者
六月 '26
六月 '26
+180
在4个频道中
五月 '26
+218
在3个频道中
Get PRO
四月 '26
+194
在5个频道中
Get PRO
三月 '26
+277
在25个频道中
Get PRO
二月 '26
+5 465
在46个频道中
Get PRO
一月 '26
+1 161
在113个频道中
Get PRO
十二月 '25
+384
在11个频道中
Get PRO
十一月 '25
+682
在46个频道中
Get PRO
十月 '25
+441
在23个频道中
Get PRO
九月 '25
+809
在41个频道中
Get PRO
八月 '25
+579
在19个频道中
Get PRO
七月 '25
+1 057
在76个频道中
Get PRO
六月 '25
+618
在66个频道中
Get PRO
五月 '25
+333
在5个频道中
Get PRO
四月 '25
+614
在34个频道中
Get PRO
三月 '25
+488
在10个频道中
Get PRO
二月 '25
+763
在44个频道中
Get PRO
一月 '25
+954
在47个频道中
Get PRO
十二月 '24
+1 302
在56个频道中
Get PRO
十一月 '24
+2 164
在189个频道中
Get PRO
十月 '24
+2 471
在55个频道中
Get PRO
九月 '24
+1 437
在202个频道中
Get PRO
八月 '24
+1 244
在43个频道中
Get PRO
七月 '24
+1 313
在51个频道中
Get PRO
六月 '24
+1 775
在57个频道中
Get PRO
五月 '24
+1 561
在39个频道中
Get PRO
四月 '24
+1 788
在45个频道中
Get PRO
三月 '24
+1 697
在24个频道中
Get PRO
二月 '24
+1 563
在8个频道中
Get PRO
一月 '24
+1 718
在46个频道中
Get PRO
十二月 '23
+771
在41个频道中
Get PRO
十一月 '23
+5 577
在70个频道中
Get PRO
十月 '23
+1 220
在21个频道中
Get PRO
九月 '23
+1 039
在0个频道中
Get PRO
八月 '23
+2 114
在0个频道中
Get PRO
七月 '23
+775
在0个频道中
Get PRO
六月 '23
+854
在0个频道中
Get PRO
五月 '23
+1 013
在0个频道中
Get PRO
四月 '23
+465
在0个频道中
Get PRO
三月 '23
+596
在0个频道中
Get PRO
二月 '23
+1 900
在0个频道中
Get PRO
一月 '23
+1 812
在0个频道中
Get PRO
十二月 '22
+696
在0个频道中
Get PRO
十一月 '22
+1 164
在0个频道中
Get PRO
十月 '22
+227
在0个频道中
Get PRO
九月 '22
+445
在0个频道中
Get PRO
八月 '22
+236
在0个频道中
Get PRO
七月 '22
+1 167
在0个频道中
Get PRO
六月 '22
+226
在0个频道中
Get PRO
五月 '22
+1 055
在0个频道中
Get PRO
四月 '22
+713
在0个频道中
Get PRO
三月 '22
+879
在0个频道中
Get PRO
二月 '22
+525
在0个频道中
Get PRO
一月 '22
+334
在0个频道中
Get PRO
十二月 '21
+112
在0个频道中
Get PRO
十一月 '21
+733
在0个频道中
Get PRO
十月 '21
+104
在0个频道中
Get PRO
九月 '21
+186
在0个频道中
Get PRO
八月 '21
+112
在0个频道中
Get PRO
七月 '21
+1 573
在0个频道中
Get PRO
六月 '21
+100
在0个频道中
Get PRO
五月 '21
+295
在0个频道中
Get PRO
四月 '21
+1 004
在0个频道中
日期
订阅者增长
提及
频道
30 六月+6
29 六月+7
28 六月+7
27 六月+5
26 六月+4
25 六月+3
24 六月+5
23 六月+6
22 六月+6
21 六月+7
20 六月+6
19 六月+3
18 六月+5
17 六月+8
16 六月+8
15 六月+9
14 六月+2
13 六月+2
12 六月+5
11 六月+3
10 六月+4
09 六月+6
08 六月+6
07 六月+3
06 六月+5
05 六月+13
04 六月+6
03 六月+14
02 六月+11
01 六月+5
频道帖子
⚡️ `nixos-cli` заменяет разрозненные инструменты NixOS вроде `nixos-rebuild` единым командным интерфейсом. * Drop-in замена д
⚡️ `nixos-cli` заменяет разрозненные инструменты NixOS вроде `nixos-rebuild` единым командным интерфейсом. * Drop-in замена для nixos-rebuild и других стандартных NixOS-скриптов * TUI для управления generations и предпросмотра options * Wrapped и unwrapped варианты Ix-пакета, чтобы избежать лишних rebuild * Интеграционные тесты через pkgs.testers.runNixOSTest https://github.com/nix-community/nixos-cli

2
goldr (Go Layout-Driven Router) Server-first, HTML-first, нативный для HTMX фреймворк на Go для создания веб-приложений, кото
goldr (Go Layout-Driven Router) Server-first, HTML-first, нативный для HTMX фреймворк на Go для создания веб-приложений, которые остаются понятными, легко запускаются и удобно меняются по мере роста проекта. #golang https://github.com/mobiletoly/goldr @Golang_google
4 571
3
👣 M:N concurrency - это одна из причин, почему Go, Tokio, Erlang и Java Loom могут держать огромную конкурентность без милли
👣 M:N concurrency - это одна из причин, почему Go, Tokio, Erlang и Java Loom могут держать огромную конкурентность без миллиона тяжёлых OS-thread. Идея простая: M лёгких задач в user-space работают поверх N настоящих kernel threads Не один поток на всё, как в старых green threads. И не один OS-thread на каждую задачу, как в классической 1:1 модели. Runtime сам решает, какую goroutine, task или virtual thread запустить на доступном системном потоке. Пока одна задача ждёт I/O, scheduler паркует её и отдаёт поток другой задаче. В этом вся магия: • дешёвые задачи • меньше переключений через ядро • масштабирование до огромного числа соединений • work stealing • event loop • runtime scheduler вместо хаоса из тысяч потоков M:N — это не синтаксис async/await и не «фича Go». Это фундаментальная модель, на которой строится современная высоконагруженная конкурентность. https://0xkiire.com/mn-concurrency-model/
6 118
4
🚀 Писать код и проектировать архитектуру сервиса — это разные навыки. Именно на этом переходе многие Go-разработчики застрев
🚀 Писать код и проектировать архитектуру сервиса — это разные навыки. Именно на этом переходе многие Go-разработчики застревают между Middle и Senior. Можно уверенно писать код, знать фреймворки, библиотеки и инфраструктуру. Но когда бизнес-логика начинает расползаться по хендлерам, use case, репозиториям и DTO, появляются дублирование, хрупкие тесты с кучей моков и страх менять код — быстро становится понятно, что одного умения писать код уже недостаточно. 🔥 7 июля стартует курс по Domain-Driven Design и Clean Architecture на Go. Это не курс про то, как собрать систему из десятков микросервисов. Фокус — на архитектуре внутри одного сервиса: как организовать код так, чтобы бизнес-логика была понятной, изолированной и готовой к изменениям. За 1,5 месяца ты научишься: — проектировать предметную область, а не просто копировать структуру базы данных; — выделять Aggregate, Entity и Value Object; — работать с Domain Events и Domain Service; — строить сервисы по принципам Clean Architecture; — отделять бизнес-логику от HTTP, gRPC, Kafka, БД и других деталей реализации; — писать тесты на поведение системы, а не на набор моков. 📦 Практика занимает 80% курса. Ты разработаешь полноценный сервис диспетчеризации заказов и получишь рабочий шаблон микросервиса, который сможешь использовать в своей работе и команде. Курс ведёт Кирилл Ветчинкин — архитектор Авито, автор архитектурного шаблона микросервиса в СберМаркете, спикер Highload++, ArchDays, Podlodka и других крупных IT-конференций. 🎁 Первый модуль доступен бесплатно. В нём разбираются типичные причины, по которым кодовая база со временем становится сложной для изменений, а также подходы, которые помогают удерживать архитектуру сервиса под контролем по мере роста проекта. 👉 Посмотри первый модуль и оцени, насколько этот подход подходит для твоих задач: https://microarch.ru/courses/ddd/languages/go?utm_source=posev&utm_medium=erid:2VtzqvzcFN1&utm_campaign=1 Реклама. ИП Ветчинкин К.Е. ИНН: 773376451099 Erid: 2VtzqvzcFN1
4 988
5
👣 OpenComputer - облачные компьютеры для AI-агентов. Полноценная Linux VM для агентов. С реальной файловой системой, root-до
👣 OpenComputer - облачные компьютеры для AI-агентов. Полноценная Linux VM для агентов. С реальной файловой системой, root-доступом, persistent state и возможностью продолжить работу с того же места. То есть это ближе к удалённому ноутбуку для агента: • VM не умирает после таймаута • состояние сохраняется между сессиями • можно делать checkpoints и откатываться назад • можно поднимать preview URL для приложений • агент работает рядом с файлами и кодом, без лишних сетевых прыжков Многие AI-sandbox решения хороши для коротких задач. Но если агент пишет приложение, ставит зависимости, меняет файлы, запускает сервер и возвращается к задаче позже, ему нужна не одноразовая среда, а нормальный компьютер. Быстрый старт: npm install @opencomputer/sdk или pip install opencomputer-sdk GitHub: github.com/diggerhq/opencomputer
4 768
6
«Следствие вели...» в Авито! И это не заголовок пугающей новости, а совсем наоборот ⚡️ Авито пригласил легенду тру-крайма Лео
«Следствие вели...» в Авито! И это не заголовок пугающей новости, а совсем наоборот ⚡️ Авито пригласил легенду тру-крайма Леонида Каневского, чтобы он разгадал таинственное и запутанное дело о внезапном росте ошибок 404 на endpoint аватарок и нашёл виновных. Звучит как план для просмотра на вечер! Кстати, кейс в основе сюжета довольно реальный... Но это уже совсем другая история 👀 📱 YouTube 📱 Rutube 📱 VK Видео
4 865
7
👣 Fenwick Tree на Go: всё держится на одном битовом трюке Fenwick Tree, или Binary Indexed Tree, считает prefix sums за O(log n). Главная операция: i & -i Она находит младший установленный бит числа. Именно это значение показывает, на сколько нужно прыгнуть по индексам внутри дерева. Пример: i = 12 // 1100 i & -i = 4 // 0100 В Go реализация выглядит так: package main type Fenwick struct { tree []int } func NewFenwick(n int) *Fenwick { return &Fenwick{ tree: make([]int, n+1), } } func (f *Fenwick) Update(i, delta int) { for i < len(f.tree) { f.tree[i] += delta i += i & -i } } func (f *Fenwick) Query(i int) int { sum := 0 for i > 0 { sum += f.tree[i] i -= i & -i } return sum } Как это работает: * Update идёт вверх по структуре и обновляет все узлы, которые отвечают за индекс * Query идёт вниз и собирает блоки, из которых состоит prefix sum * i & -i каждый раз выбирает размер текущего блока Главный нюанс: Fenwick Tree обычно использует 1-based indexing. То есть первый элемент имеет индекс 1, а не 0. Пример использования: fw := NewFenwick(5) fw.Update(1, 10) fw.Update(2, 20) fw.Update(3, 30) println(fw.Query(3)) // 60 Красота Fenwick Tree в том, что дерево не хранится явно. Нет указателей. Нет рекурсии. Нет сложной структуры узлов. Только массив и один битовый трюк. Дерево спрятано прямо внутри двоичного представления индексов.
4 428
8
LLM в поддержке: от шаблонов к точной работе с документами компании ✅ На открытом уроке разберём, как устроены современные ре
LLM в поддержке: от шаблонов к точной работе с документами компании ✅ На открытом уроке разберём, как устроены современные решения на базе LLM, почему они не просто генерируют текст, а используют знания компании для подготовки ответов, и как такие инструменты помогают ускорять обработку обращений. На практических примерах покажем, как документы превращаются в базу знаний для ИИ, как происходит поиск информации по запросу клиента и каким образом LLM помогает оператору поддержки готовить ответы. Также поговорим о том, как подобные решения применяются в бизнесе уже сегодня. Урок пройдёт 6 июля в 20:00 МСК в преддверии старта курса «LLM-инженер». Это возможность познакомиться с современным подходом к созданию интеллектуальных сервисов, задать вопросы эксперту и понять, как внедрять подобные решения в реальные процессы компании. ➡️ Регистрация открыта: https://otus.pw/87OsL/?erid=2W5zFHKg1DK Реклама. ООО "ОТУС ОНЛАЙН-ОБРАЗОВАНИЕ". ИНН 9705100963.
4 705
9
🔍 Dockpeek — минималистичный дашборд для просмотра Docker-контейнеров и их портов * Для чего Нужно быстро вспомнить, на како
🔍 Dockpeek — минималистичный дашборд для просмотра Docker-контейнеров и их портов * Для чего Нужно быстро вспомнить, на каком хост-порту торчит сервис внутри Docker? Dockpeek показывает список контейнеров, сопоставление портов и состояние (Up, Exited) в один клик. * Ключевые особенности • Веб-интерфейс без тяжёлого JS-стека • Авторизация по логину-паролю • Чтение Docker API через socket-proxy с правами read-only • Установка одним docker compose up -d • Контейнеры кликабельны: переход по URL открывает сервис сразу на нужном порте * Быстрый старт git clone https://github.com/dockpeek/dockpeek cd dockpeek cp .env.example .env # при необходимости меняем логин/пароль docker compose up -d Перейдите на http://<host>:8080, войдите и увидите все порты контейнеров. * Кому пригодится – Админам, которым Portainer/Komodor кажутся избыточными – Разработчикам, у кого десятки локальных контейнеров с разными портами – Оптимизаторам CI: можно встроить в тестовый раннер как read-only просмотрщик https://github.com/dockpeek/dockpeek
5 347
10
Разрабатываете на Go больше четырёх лет? Сразу 7 наших команд ждут вас: Сервис Транспорта строит маршруты во всех продуктах 2
Разрабатываете на Go больше четырёх лет? Сразу 7 наших команд ждут вас: Сервис Транспорта строит маршруты во всех продуктах 2ГИС, отображает пробки, дорожные события и автобусы на карте. Social сотворяет магию вокруг социального графа. Platform Backend Services превращает бизнес‑требования в платформенные сервисы: от идеи до запуска фич мобильными командами без лишних зависимостей. Web API решает все справочные задачи, управляет стилями карт и обратной связью от пользователей в продуктах. Сервис Рекламы создаёт техническую основу для продуктов рекламного направления. 2ГИС Логистика строит и пересчитывает маршруты с учётом пробок, погодных условий, типов транспорта, параметров груза и сложных логистических цепочек. ГеоПоток помогает бизнесу повышать прозрачность процессов и сокращать издержки. Все вакансии на сайте Другие инженерные инсайты от 2ГИС → в Telegram-канале RnD
4 748
11
👣 Почему один Mutex может убить производительность Go-кэша Интересный разбор для тех, кто пишет кэш в Go и думает, что пробл
👣 Почему один Mutex может убить производительность Go-кэша Интересный разбор для тех, кто пишет кэш в Go и думает, что проблема решается простым sync.RWMutex. Автор прогнал 6 вариантов дизайна кэша и показал неприятную вещь: один общий lock быстро становится бутылочным горлышком. Чем больше горутин лезет в кэш, тем сильнее они начинают мешать друг другу. Самый практичный вывод: шардируйте locks. Вместо одной большой map под одним mutex кэш делится на несколько shard’ов. Каждый shard хранит свою часть данных и имеет свой lock. В итоге разные goroutine чаще работают с разными locks, меньше ждут друг друга и лучше используют CPU. Отдельно интересно, что sync.RWMutex не всегда спасает. На смешанной нагрузке с чтением и записью его накладные расходы могут оказаться заметнее, чем кажется. А sync.Map тоже не превращается в универсальную кнопку «сделать быстро». Хороший материал про то, почему производительность в Go часто ломается не на алгоритме, а на конкуренции за одну общую точку. Статья: «Shard your locks: benchmarking 6 Go cache designs» https://strebkov.dev/posts/shard-your-locks/
6 860
12
⚡️ Solod v0.1 — системный язык с почти Go-синтаксисом, который транспилируется в C и компилируется через GCC или Clang в нати+1
⚡️ Solod v0.1 — системный язык с почти Go-синтаксисом, который транспилируется в C и компилируется через GCC или Clang в нативный бинарник. Он позволяет писать почти как на Go, но получать низкоуровневый контроль без Go runtime, GC и Cgo-оверхеда. В v0.1 уже портировали часть стандартной библиотеки Go: io, bufio, fmt, bytes, strings, strconv, slices, maps, os, flag, time, log/slog, crypto/rand, math/rand и другие. Отдельно добавлены пакеты mem и c: первый отвечает за явное управление памятью через аллокаторы, второй упрощает интероп с C. Например, C-библиотеки можно подключать напрямую через so:include, а функции без тела Solod сам воспринимает как extern`-декларации. Go-строки при вызове C API автоматически превращаются в `const char*, без ручного бойлерплейта. Память управляется явно, примерно в духе Zig: можно использовать системный аллокатор или арену на стеке. GC-пауз нет, но за это приходится платить ручным освобождением ресурсов. Solod пока выглядит не как замена Go, а как интересный инструмент для CLI, системных утилит, embedded-сценариев и прямой работы с C-библиотеками без Cgo. go install solod.dev/cmd/so@latest https://github.com/solod-dev/solod
9 321
13
Ozon Tech запускает Route 256 Pro для опытных Go-разработчиков. Это бесплатный 2-месячный интенсив на реальных проектах для т
Ozon Tech запускает Route 256 Pro для опытных Go-разработчиков. Это бесплатный 2-месячный интенсив на реальных проектах для тех, кто готов усилить свои навыки разработки. В программе — высоконагруженные сервисы на Go, стек и инструменты разработки Ozon Tech, проектирование и управление микросервисными системами. Участие в Route 256 Pro — это шанс прокачать сразу всё: от написания кода до архитектурного мышления в масштабах бигтеха. Это сильный нетворк с контактами в закрытом комьюнити экспертов, к которым прислушивается индустрия. Это достойное портфолио с мощным проектом в известном продукте. Если интересно узнать, как всё устроено в маркетплейсе, которыми пользуются миллионы людей, подавайте заявку: https://route256.ozon.ru/go
8 921
14
У триллионеров свои развлееничя: Маск покупает Cursor. По данным Reuters, сделка оценивается в $60 млрд и пройдет в формате о
У триллионеров свои развлееничя: Маск покупает Cursor. По данным Reuters, сделка оценивается в $60 млрд и пройдет в формате обмена акциями. Закрытие ожидается в третьем квартале 2026 года. Контекст тут особенно интересный. Еще год назад Cursor оценивали примерно в $2,5 млрд. Стартапом также интересовались Microsoft и OpenAI, но команда хотела оставаться независимой. В итоге пришел Маск и, похоже, сделал предложение, от которого сложно отказаться. У Anthropic есть Claude Code, у OpenAI есть Codex, а теперь у экосистемы Маска может появиться Cursor как готовый enterprise-продукт для разработчиков.
10 319
15
restic - кроссплатформенный инструмент для бэкапов, который сохраняет зашифрованные снапшоты в 12 разных типах хранилищ. * По
restic - кроссплатформенный инструмент для бэкапов, который сохраняет зашифрованные снапшоты в 12 разных типах хранилищ. * Поддерживает Linux, macOS, Windows, FreeBSD и OpenBSD * Среди бэкендов: локальное хранилище, SFTP, S3, B2, Azure и GCS * Использует дедупликацию и шифрование для эффективных и безопасных резервных копий * Позволяет восстанавливать данные напрямую или через FUSE-mount https://github.com/restic/restic
16 393
16
🔍 SenPai Scanner: Найдите рабочие IP через Cloudflare SenPai Scanner — это инструмент с терминальным интерфейсом для поиска
🔍 SenPai Scanner: Найдите рабочие IP через Cloudflare SenPai Scanner — это инструмент с терминальным интерфейсом для поиска рабочих IP-адресов Cloudflare. Просто вставьте конфигурацию VLESS или Trojan и настройте параметры для проверки IP-адресов, которые действительно работают через ваш прокси. 🚀 Основные моменты: - Легкий в использовании интерфейс без командной строки - Два этапа проверки: сканирование и валидация - Поддержка нескольких платформ: Linux, macOS, Windows - Результаты сохраняются в текстовом файле для удобства 📌 GitHub: https://github.com/MatinSenPai/SenPaiScanner #go
9 839
17
👣 Gortex - локальный code graph и intelligence engine для AI coding agents. Агенту не нужно читать весь файл на 500 строк, е
👣 Gortex - локальный code graph и intelligence engine для AI coding agents. Агенту не нужно читать весь файл на 500 строк, если ему нужен один символ, цепочка вызовов или blast radius конкретного изменения. Gortex индексирует репозитории и отдаёт агенту только нужный кусок контекста. За счёт этого в README заявляют до 50x меньше токенов на ответ. Что умеет: - 257 языков - multi-repo workspaces - доступ через CLI, MCP Server и HTTP API - локальный запуск без внешней БД, сети и скачивания модели - symbol lookup, call chains, dataflow, clone detection, refactoring, code actions - semantic search через hybrid BM25 + vector + RRF - поддержка Claude Code, Cursor, Windsurf, Copilot, Codex CLI, Gemini CLI, Aider и других агентов Gortex умеет строить граф не только внутри одного проекта, но и между репозиториями: HTTP routes, gRPC, GraphQL, Kafka/RabbitMQ/NATS, env vars, OpenAPI и другие контракты. Это уже ближе к нормальному «пониманию системы», а не просто поиску по файлам. Gortex написан на Go, работает локально и подключается к агентам через MCP. GitHub: https://github.com/zzet/gortex #golang
9 299
18
🔍Тестовое собеседование с Go Senior из Uzum в этот четверг 11 июня(в четверг!) в 19:00 по мск приходи онлайн на открытое соб
🔍Тестовое собеседование с Go Senior из Uzum в этот четверг 11 июня(в четверг!) в 19:00 по мск приходи онлайн на открытое собеседование, чтобы посмотреть на настоящее интервью на Middle Go-разработчика. Как это будет: 📂 Маруф Караев, Senior из Uzum, ex-Яндекс, ex-EPAM будет задавать реальные вопросы и задачи разработчику-добровольцу 📂 Маруф будет комментировать каждый ответ респондента, чтобы дать понять, чего от вас ожидает собеседующий на интервью 📂 В конце можно будет задать любой вопрос Маруфу Это бесплатно. Эфир проходит в рамках менторской программы от ШОРТКАТ для Go-разработчиков, которые хотят повысить свой грейд, ЗП и прокачать скиллы. Переходи в нашего бота, чтобы получить ссылку на эфир → @shortcut_go_bot Реклама. О рекламодателе.
5 245
19
👣 gomupdf - быстрый Go-инструмент для работы с PDF поверх MuPDF Если нужно читать, рендерить и собирать PDF в Go без тяжёлой
👣 gomupdf - быстрый Go-инструмент для работы с PDF поверх MuPDF Если нужно читать, рендерить и собирать PDF в Go без тяжёлой обвязки, появился интересный проект gomupdf. Это cgo-binding над проверенным C-ядром MuPDF, но с небольшим API в стиле Go. Под капотом мощный PDF-движок, снаружи - нормальный интерфейс для прикладной разработки. Что умеет: - извлекать текст из PDF - находить таблицы - рендерить страницы - собирать документы - работать с PDF без лишней магии вокруг Хороший вариант для сервисов, где PDF - часть пайплайна: отчёты, документы, OCR-подготовка, извлечение таблиц, генерация файлов. #golang https://github.com/srijanmukherjee/gomupdf
7 341
20
В новом пакете `uuid` в Go есть странная на первый взгляд деталь: глобальный mutex `v7mu`. Для UUID это выглядит необычно. UU
В новом пакете `uuid` в Go есть странная на первый взгляд деталь: глобальный mutex `v7mu`. Для UUID это выглядит необычно. UUID обычно воспринимается как stateless-значение: вызвал генератор, получил случайный идентификатор, пошёл дальше. Зачем там вообще общий mutex? Ответ в UUIDv7. NewV7() должен генерировать UUID, которые нормально сортируются по времени. Это удобно для баз данных, логов и индексов: новые значения идут после старых, а не разбрасываются случайно по всему B-tree. Но время не всегда ведёт себя идеально: - несколько UUID могут быть созданы в одну и ту же миллисекунду - системные часы могут сдвинуться назад - параллельные goroutine могут вызвать NewV7() одновременно Чтобы сохранить порядок, Go хранит небольшой package-level state: - v7lastSecs - последние секунды - v7lastTimestamp - последний timestamp - v7mu - mutex, который защищает эти значения Если новый timestamp оказался не больше предыдущего, Go аккуратно увеличивает его на шаг. Так следующий UUID всё равно будет сортироваться после прошлого. Получается интересный компромисс: UUID остаётся простым значением снаружи, но внутри генератор UUIDv7 уже не полностью stateless. Ему нужна маленькая синхронизированная память, чтобы гарантировать монотонный порядок. Немного неожиданно, но очень практично: лучше один mutex в генераторе, чем хаотичные UUID в индексах и странные проблемы с сортировкой.
9 308