Русский
Открыть в Telegram
ББиблиотека Go-разработчика | Golang

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

@goproglib · канал · в индексе с 18.04.2026
23 911подписчиков−70 за неделю
2 594средний охват поста
10.9%ER — охват к подписчикам
38постов за 30 дней
Б
Библиотека Go-разработчика | Golang
Фотография
🔎 ReverseProxy: заголовок добавили, а backend его не увидел Прокси записывает X-App-User в Director. Клиент присылает Connection: X-App-User — и до backend заголовок уже не доходит. Причина в порядке обработки: hop-by-hop заголовки удаляются после вызова Director. Клиент может перечислить их в Connection, включая поле, которое добавил сам прокси. С Rewrite порядок другой: сначала очистка, затем callback. Добавленный в r.Out.Header заголовок сохраняется. Менять входящий r.In нельзя. В локальном тесте backend получил пустую строку с Director и proxy-user с Rewrite. Оба сценария — на Go 1.27.2. В текущей документации Director помечен устаревшим, для нового кода рекомендуется Rewrite. ➡️ Порядок обработки ReverseProxy 📍 Навигация: Вакансии • Задачи • Собесы 🐸 Библиотека Go-разработчика
❤1
10 · 1.4K ·
Б
Библиотека Go-разработчика | Golang
Фотография
🌐 Go 1.27: закрыли Body — соединение ещё пригодится Клиенту нужен только статус ответа, поэтому тело он не читает. До Go 1.26 включительно вызов resp.Body.Close() в таком HTTP/1-запросе приводил к закрытию соединения. Следующий запрос снова платил за TCP и TLS. В Go 1.27 Transport после Close асинхронно дочитывает ненужное тело: не более 256 КиБ и не дольше 50 мс. Если успеет, соединение можно использовать повторно. При Connection: close дочитывание пропускается. 🔴 Даже успешный JSON Decode не всегда читает тело до конца: после объекта может остаться перевод строки. Для HTTP/1 это тоже мешало повторному использованию соединения. Команда Go теперь рекомендует просто закрывать Body, когда оно больше не нужно. Повторное использование не гарантируется: действуют лимиты дочитывания и условия соединения. HTTP/2 использует отдельные потоки, поэтому такого дочитывания не требует. ➡️ Как это устроено в net/http 📍 Навигация: Вакансии • Задачи • Собесы 🐸 Библиотека Go-разработчика
😢1❤1
23 · 2.1K ·
Б
Библиотека Go-разработчика | Golang
Фотография
🛠 gopls спрашивает, какие теги добавить полям структуры Раньше действие Add struct tags добавляло json-теги в camelCase. Теперь gopls умеет уточнять параметры: например, выбрать json,yaml,db и snake_case. Ставите курсор на структуру, вызываете действие, отвечаете на два вопроса — сервер генерирует теги для её полей. При удалении тоже можно выбрать конкретные ключи, сохранив остальные. Для интерактивной работы команда рекомендует gopls 0.24.0 и Go-расширение VS Code 0.56.0. Одного обновления сервера недостаточно: редактор должен поддерживать новые диалоги. В статье показаны и другие сценарии, но их статус различается. Перенос объявлений демонстрируется как preview, а изменение сигнатуры пока в планах. Проверяйте доступность нужного действия, прежде чем рассчитывать на него в рабочем процессе. 📍 Навигация: Вакансии • Задачи • Собесы 🐸 Библиотека Go-разработчика
9 · 3.5K ·
Библиотека Go-разработчика | Golang
Фотография
⚙️ Go 1.27 открывает SIMD-инструкции ARM и WebAssembly без ассемблера Переносимый SIMD скрывает различия процессоров. Но для специфических операций есть более низкий уровень — экспериментальный simd/archsimd. В Go 1.27 к amd64 добавились arm64 и wasm. Эксперимент включается при сборке: GOEXPERIMENT=simd go build При переносе алгоритма важны крайние случаи. Например, PermuteOrZero на amd64 и LookupOrZero на ARM/wasm по-разному обрабатывают индексы вне диапазона. Поэтому похожие операции получили разные имена. Это инструмент для измеренных горячих участков: обработки байтов, чисел и векторов. Проверки доступности инструкций и запасной путь остаются частью реализации. API экспериментальный; обычные циклы от включения флага автоматически не векторизуются. 📍 Навигация: Вакансии • Задачи • Собесы 🐸 Библиотека Go-разработчика
9 · 3.3K ·
Б
Фотография
😎 Выбираешь один курс, второй получаешь бесплатно. Баг? Нет, акция! До 31 октября в Proglib Academy можно выбрать два курса и заплатить только за один. Например, можно совместить: 💥 ИИ для разработчиков — применение нейросетей в повседневной разработке: работа с кодом, тестирование и ревью. 💥 Разработка ИИ-агентов — архитектура агентов и создание собственных AI-решений. Вместе курсы стоят 108 000 ₽, но по акции оба обойдутся в 59 000 ₽. Экономия — 49 000 ₽ 🔥 Интересуют Python и ИИ или алгоритмы и архитектура? Можно выбрать любые два курса из каталога. Акция действует до 31 октября включительно ⏳ ⏬ Собрать свой учебный билд
1 · 3.2K ·
Б
Библиотека Go-разработчика | Golang
Фотография
💾 Команда Dolt ускорила WAL сочетанием fdatasync и записи нулей Заменить fsync на fdatasync оказалось недостаточно. Команда Go-базы Dolt также стала заранее записывать 4 МиБ нулей при расширении журнала. Следующие записи перезаписывают готовую область, реже требуя синхронизации метаданных. Во внутренних тестах небольших последовательных записей это дало 10–40% прироста. Помогло сочетание Ext4 и сетевого диска с заметной задержкой, но свободной пропускной способностью. На Btrfs и OpenZFS такого выигрыша не увидели. А предварительная запись нулей увеличивает объём записи — вплоть до двух раз. При упоре в пропускную способность оптимизация может навредить. Полезный разбор для тех, кто пишет хранилища и журналы на Go. На дату статьи изменение было в main, но ещё не вошло в релиз Dolt. 📍 Навигация: Вакансии • Задачи • Собесы 🐸 Библиотека Go-разработчика
7 · 3.3K ·
Б
Библиотека Go-разработчика | Golang
singleflight: один запрос к источнику вместо одинаковых параллельных Кеш опустел, и несколько обработчиков одновременно пошли за одним товаром в БД. Пока первый запрос ещё работает, остальные повторяют ту же работу. Для такой ситуации есть golang.org/x/sync/singleflight. Вызов Group.Do(key, fn) объединяет обращения с одинаковым ключом: выполняется одна функция, остальные ждут и получают её результат вместе с ошибкой. Ключи разные — работа идёт независимо. Все обработчики должны использовать одну и ту же Group, а не создавать её заново на каждый запрос. Ключ описывает всё, от чего зависит результат. Если данные различаются между арендаторами, одного ID товара мало. Например, tenant:42:product:7 отделяет его от такого же товара другого арендатора. Готовый результат singleflight не хранит: следующий вызов после завершения работы снова запустит функцию. Механизм действует внутри одного процесса и не ограничивает общее число запросов по разным ключам. А флаг shared сообщает, что результат получили несколько вызовов, а не что сработал кеш. Документация singleflight 📍 Навигация: Вакансии • Задачи • Собесы 🐸 Библиотека Go-разработчика
21 · 2.9K ·
Библиотека Go-разработчика | Golang
Тест упал. Покажите, что именно разошлось Два больших объекта в логе приходится сравнивать глазами. cmp.Diff(want, got) из go-cmp показывает различия, в том числе во вложенных структурах. Пустая строка означает, что значения равны по выбранным правилам. Мини-пример для файла tags_test.go. Здесь разные вторые элементы, поэтому тест намеренно падает: package example import ( "testing" "github.com/google/go-cmp/cmp" ) func TestTags(t *testing.T) { want := []string{"go", "sql"} got := []string{"go", "http"} diff := cmp.Diff(want, got) if diff != "" { t.Errorf("tags mismatch (-want +got):\n%s", diff) } } При таком порядке аргументов строки с - относятся к ожидаемому значению, с + — к полученному. Сам формат diff нестабилен: он для чтения человеком, а не для парсинга. Правила равенства тоже часть теста. По умолчанию nil и пустой слайс различаются. Опция cmpopts.EquateEmpty() уравнивает слайсы и map нулевой длины, но добавлять её стоит только тогда, когда API действительно не различает эти состояния. Неэкспортируемые поля без подходящего правила сравнения могут вызвать панику. cmp.Diff • EquateEmpty 📍 Навигация: Вакансии • Задачи • Собесы 🐸 Библиотека Go-разработчика
10 · 2.7K ·
Б
Фотография
📌 Один курс — хорошее вложение в себя. Два по той же цене — ещё лучше. В Proglib Academy действует акция: покупаешь один курс, а второй получаешь в подарок. Например, можно совместить два направления по работе с ИИ: 💥 ИИ для разработчиков — применение нейросетей в повседневной разработке: работа с кодом, тестирование и ревью. 💥 Разработка ИИ-агентов — архитектура агентов и создание собственных AI-решений. 📍 Разница в цене — почти 50 тысяч рублей. Можно освоить больше, не выходя за рамки запланированного бюджета. А если тебе интереснее Python, алгоритмы, backend или DevOps — выбирай другую пару курсов из каталога. Акция действует до 31 октября включительно ⏳ ⏮️ Пора прокачать свой стек
2 · 2.7K ·
Библиотека Go-разработчика | Golang
Fuzzing нашёл ошибку. Сохраните вход вместе с исправлением Обычный go test запускает fuzz-тест на исходном корпусе: входах из f.Add и файлов testdata/fuzz. Новые входы в этом режиме не генерируются. Активный поиск нужно включить отдельно. Если в пакете один fuzz-тест, короткий запуск выглядит так: go test -fuzz=. -fuzztime=10s Если их несколько, вместо точки задайте регулярное выражение, которое выбирает ровно один. Движок меняет входы и использует покрытие кода, чтобы находить новые пути выполнения. Но проверяемое свойство задаёт автор теста. Например, после кодирования и обратного декодирования должны получиться исходные данные. При сбое Go пытается уменьшить вход, сохранив ошибку, и записывает его в подкаталог testdata/fuzz с именем теста. Путь и команду точечного повторного запуска он выводит в терминал. После исправления запустите go test и добавьте найденный файл в репозиторий вместе с кодом. Этот вход станет регрессионной проверкой и будет выполняться без нового fuzzing-запуска. А вот интересные входы из кеша $GOCACHE/fuzz используются только при активном поиске. Десять секунд без падений не доказывают отсутствие ошибок. Сам fuzz-target должен быть быстрым, детерминированным и не зависеть от изменяемого глобального состояния. Как Go хранит корпус и воспроизводит сбои 📍 Навигация: Вакансии • Задачи • Собесы 🐸 Библиотека Go-разработчика
9 · 2.9K ·
Б
Фотография
Динозавр держится за ВМ и снапшоты по расписанию, Археолог давно не помнит, что и где у него крутится, а Повелителю облаков уютно до первого кругленького счёта. Это три из десяти типов инфраструктуры в тесте от команды Deckhouse. Ответьте на 5 вопросов, узнайте свой тип и отправьте ссылку на результат команде. Посмотрим, совпадёт ли он у коллег. → Пройти тест и узнать свой тип
1 · 2.9K ·
Б
Библиотека Go-разработчика | Golang
Фотография
Тело запроса слишком большое. Не маскируйте это под EOF io.LimitReader прекращает чтение на лимите, как будто данные закончились. Для входящего HTTP-body есть http.MaxBytesReader(w, r.Body, n): попытка прочитать сверх лимита возвращает *http.MaxBytesError. Оберните r.Body до чтения. Превышение проверяется именно при чтении, а не при создании обёртки. Один json.Decoder.Decode может оставить хвост непрочитанным. Обработчик сам распознаёт ошибку и выбирает ответ 413. Лимит байтов не заменяет таймаут чтения. Документация MaxBytesReader 📍 Навигация: Вакансии • Задачи • Собесы 🐸 Библиотека Go-разработчика
16 · 2.8K ·
Б
Библиотека Go-разработчика | Golang
Фотография
SQL тормозит? Сначала посмотрите на очередь пула sql.DB — пул соединений. Когда достигнут SetMaxOpenConns, следующая операция ждёт свободное соединение, ещё не выполняя SQL. У db.Stats() есть InUse, Idle и накопительные WaitCount, WaitDuration. Сравните счётчики в начале и конце интервала: растут ли ожидания вместе с задержкой сервиса? Это время ожидания соединения, а не выполнения запроса в БД. Не повышайте лимит вслепую. Учитывайте возможности БД и число реплик сервиса. SetMaxIdleConns управляет оставленными свободными соединениями, а не общим потолком. Управление пулом 📍 Навигация: Вакансии • Задачи • Собесы 🐸 Библиотека Go-разработчика
13 · 2.6K ·
Б
Библиотека Go-разработчика | Golang
Фотография
Конфиг должен быть старым или новым, а не записанным наполовину Прямая перезапись файла может показать читателю неполные данные. github.com/google/renameio/v2 решает другую задачу: атомарно заменяет файл подготовленной версией. renameio.WriteFile берёт на себя временный файл, корректную замену и уборку при ошибке. Читатель не должен увидеть промежуточное содержимое. Но атомарность не равна сохранности после отключения питания: durability пакет не обещает. На Windows он не экспортирует функций. А права в v2 учитывают umask процесса. README и ограничения renameio 📍 Навигация: Вакансии • Задачи • Собесы 🐸 Библиотека Go-разработчика
8 · 2.4K ·
Библиотека Go-разработчика | Golang
Фотография
Burst — не число одновременно работающих запросов rate.NewLimiter(r, b) из golang.org/x/time/rate создаёт полную корзину на b токенов. Она пополняется со скоростью r токенов в секунду. Начальный запас разрешает короткий всплеск. Allow() сразу откажет, если токена нет. Wait(ctx) подождёт, учитывая отмену и дедлайн. Для общего бюджета используйте общий экземпляр лимитера, а не новый в каждом обработчике. Долгие операции всё равно могут выполняться параллельно. Число занятых горутин ограничивайте отдельно. Между репликами сервиса этот лимитер состояние не делит. Документация rate 📍 Навигация: Вакансии • Задачи • Собесы 🐸 Библиотека Go-разработчика
17 · 2.1K ·
Б
Фотография
🔔 Последние дни акции Proglib Academy! Покупаете один курс — второй получаете в подарок. Успейте до 31 октября. Можно совместить два направления и прокачать навыки сразу в нескольких областях: ⬆️ ИИ для разработчиков — системная работа с ИИ на всех этапах разработки: от планирования задачи до написания кода, тестирования и ревью. ⬆️ Разработка ИИ-агентов — создание собственных агентов для работы с данными, API и внешними сервисами. В программе — RAG, MCP, LangGraph, n8n и тестирование агентов. Первый курс поможет встроить ИИ в привычный процесс разработки, второй — перейти к созданию собственных интеллектуальных инструментов. 🎁 А если эти направления не совсем то, что нужно, можно выбрать любые две программы из каталога. Осталось совсем немного времени — акция заканчивается 31 октября! 👉 Подобрать свою пару курсов
1.9K ·
Б
Библиотека Go-разработчика | Golang
txdb: настоящий SQL и откат после теста SQL-mock проверяет ожидания теста. go-txdb позволяет выполнить запросы на настоящей тестовой БД: драйвер открывает внешнюю транзакцию и проводит через неё операции вашего sql.DB. При закрытии соединения txdb откатывает эту транзакцию. После подключения настоящего SQL-драйвера и пакета txdb тест может получить свой db так. testDSN должен указывать на отдельную подготовленную тестовую БД: db := sql.OpenDB(txdb.New("postgres", testDSN)) t.Cleanup(func() { err := db.Close() if err != nil { t.Error(err) } }) Дальше передайте этот db проверяемому коду. При варианте через txdb.Register строка в sql.Open("txdb", identifier) служит идентификатором транзакции. Разным тестовым транзакциям нужны разные идентификаторы. Вызовы Begin и Commit внутри обёртки работают через savepoint, не завершая внешнюю транзакцию. Поведение зависит от настоящего драйвера, иногда нужна настройка SavePointOption. Метод годится для проверки SQL и отката транзакционных изменений. Но он не воспроизводит независимые конкурентные транзакции и настоящий внешний commit. Последовательности, нетранзакционный DDL и внешние вызовы могут пережить rollback. Их поведение проверяйте отдельно для своей БД. README с настройкой тестовой БД • Транзакции и savepoint 📍 Навигация: Вакансии • Задачи • Собесы 🐸 Библиотека Go-разработчика
❤3😢1🥰1
11 · 1.8K ·
Б
Библиотека Go-разработчика | Golang
Фотография
Повторить Body — ещё не значит безопасно повторить операцию go-retryablehttp умеет заново отправлять тело запроса и настраивать повторы. RetryMax = 2 означает до двух повторов после первой попытки, то есть до трёх отправок. Настройте CheckRetry под свой endpoint и задайте контекст с дедлайном. Стандартная политика прекращает повторы при отмене контекста. Обычный exponential backoff не добавляет jitter автоматически. Главная ловушка: сервер мог изменить данные, а ответ потерялся. Повторяемое Body не устраняет повторный эффект. Для такой операции нужна собственная политика идемпотентности на стороне API. Клиент и настройки повторов 📍 Навигация: Вакансии • Задачи • Собесы 🐸 Библиотека Go-разработчика
7 · 1.2K ·
Б
Библиотека Go-разработчика | Golang
filepath.Join не удержит файл внутри каталога Внешнее имя файла нельзя сделать безопасным одним filepath.Join(base, name). Путь может выйти наружу, в том числе через символическую ссылку. Проверка через EvalSymlinks перед отдельным открытием оставляет окно гонки: между этими действиями файловая система может измениться. Для одного открытия есть os.OpenInRoot(base, name). Для серии операций — os.OpenRoot и методы полученного Root. Они отклоняют пути, выходящие за корень, и допускают символические ссылки внутри дерева. Нужен исправленный toolchain. В GO-2026-4970 описан обход границы на Unix через конечную символическую ссылку и завершающий слеш. Исправления появились в 1.25.12, 1.26.5 и 1.27.0-rc.2. Это минимумы исправления для затронутых веток, а не список рекомендуемых сейчас релизов. Выбирайте поддерживаемую версию с актуальными исправлениями. У Root есть границы защиты: он не запрещает переходы через mount points, Linux bind mounts, доступ к /proc и Unix-устройствам. При GOOS=js нет защиты от гонки с подменой symlink. Это средство против выхода по пути, а не полноценная изоляция процесса. Разбор path traversal • Текущие ограничения os.Root 📍 Навигация: Вакансии • Задачи • Собесы 🐸 Библиотека Go-разработчика
❤2
6 · 724 ·
Б
Библиотека Go-разработчика | Golang
Фотография
Run ждёт, хотя процесс уже завершился У запущенной команды может остаться потомок, унаследовавший stdout. Сама команда уже вышла, а Run всё ещё ждёт EOF в pipe, через который забирает вывод. Cmd.WaitDelay ограничивает такое ожидание. Таймер стартует после отмены контекста или обнаружения завершившегося процесса. Когда срок истечёт, Go закроет оставшиеся I/O pipes. При успешном выходе команды без вызова Cancel результатом может стать exec.ErrWaitDelay. WaitDelay не завершает всё дерево процессов и не разблокирует зависший пользовательский io.Writer. Жизненный цикл такого Writer нужно контролировать отдельно. Документация os/exec 📍 Навигация: Вакансии • Задачи • Собесы 🐸 Библиотека Go-разработчика
1 · 203 ·
Б
Библиотека Go-разработчика | Golang
Фотография
Откуда взялся context canceled При остановке сервиса разные операции получают один и тот же context canceled. Причину отмены можно передать через WithCancelCause и прочитать через context.Cause. На карточке дочерний контекст получает причину от родителя. ctx.Err() остаётся context.Canceled, а Cause возвращает deployment stopping. Второй вызов cancel её не заменяет: срабатывает первая отмена самого контекста или его предка. При cancel(nil) причиной станет context.Canceled. До отмены Cause вернёт nil. Отмена контекста не означает, что горутины уже остановились — их завершение нужно ждать отдельно. Документация context 📍 Навигация: Вакансии • Задачи • Собесы 🐸 Библиотека Go-разработчика
❤1
11 · 1.1K ·
Библиотека Go-разработчика | Golang
Фотография
Bleve: поиск по тексту внутри Go-приложения Для поиска по локальному каталогу или документации можно встроить Bleve прямо в Go-приложение. Библиотека индексирует структуры и JSON, поддерживает текстовые запросы, подсветку совпадений и фасеты. В небольшом примере индекс в памяти содержит два документа. Запрос по полю Text находит документ с «goroutines», неизвестное слово даёт ноль совпадений. Повторная индексация под тем же ID заменяет прежний документ. В Bleve есть русский анализатор, но он не включается автоматически только потому, что текст русский. Анализатор и mapping нужно выбирать под корпус. По этому примеру с двумя документами нельзя оценить скорость на вашей нагрузке. Репозиторий Bleve 📍 Навигация: Вакансии • Задачи • Собесы 🐸 Библиотека Go-разработчика
7 · 362 ·
Б
GIF
1096098.mp4 · 759 КБ
17 ноября AvitoTech раскладывает инженерные кейсы за игровыми столами 👀 Команда зовёт на Backend Roulette — вечеринку для бэкендеров, Go-разработчиков и архитекторов System Design, где задачи разыгрываются как партия в покер. Докладов не будет: вместо них практика, обмен опытом и немного азарта. За каждым столом сидит эксперт AvitoTech в роли крупье. Он выдаёт команде вводные, а по ходу игры подкидывает новые обстоятельства, под которые решение придётся перестраивать. А если за стол не хочется, можно заглянуть на сайд-активности или просто познакомиться с коллегами. После игры гостей ждёт афтерпати и нетворк. Уметь играть в покер необязательно, главное — желание классно провести время. 📌 Зарегистрироваться!
5 · 352 ·
Б
Библиотека Go-разработчика | Golang
Фотография
pgx Batch: когда можно снова использовать соединение После SendBatch соединение ещё занято результатами пакета. Перед следующим запросом обязательно вызвать BatchResults.Close и проверить его ошибку, даже если нужные строки уже прочитаны. Close дочитывает оставшиеся результаты и вызывает зарегистрированные callbacks. Ошибка в callback или в пакете останавливает следующие callbacks. Поэтому defer Close() без обработки ошибки может скрыть сбой. В обычном SendBatch запросы выполняются в неявной транзакции, если не задано явное управление транзакцией. В зависимости от режима pgx может подготовить все запросы до исполнения первого. Создание таблицы и обращение к ней в том же пакете могут не сработать. Контракт BatchResults и SendBatch 📍 Навигация: Вакансии • Задачи • Собесы 🐸 Библиотека Go-разработчика
10 · 1.8K ·
Б
Библиотека Go-разработчика | Golang
Фотография
IPv4-префикс не узнаёт IPv4 внутри IPv6 Адрес ::ffff:192.0.2.10 содержит IPv4, но для netip это IPv4-mapped IPv6. Для IPv4-префикса 192.0.2.0/24 метод Contains вернёт false. Если правила приложения считают обе записи одним адресом, сначала примените Unmap(). Он извлекает вложенный IPv4. Обычный IPv4 и настоящий IPv6 остаются без изменений. Другая допустимая политика — сразу отвергать mapped-адреса. На карточке — адрес из диапазона для документации и только проверка попадания в префикс. Для защиты от SSRF одного Unmap недостаточно: отдельно проверяют фактические адреса подключения после DNS и переходы по редиректам. Документация net/netip 📍 Навигация: Вакансии • Задачи • Собесы 🐸 Библиотека Go-разработчика
👍1
7 · 986 ·
Архив по месяцам
ноябрь 2026октябрь 2026сентябрь 2026август 2026июль 2026июнь 2026май 2026апрель 2026март 2026февраль 2026январь 2026декабрь 2025ноябрь 2025октябрь 2025сентябрь 2025август 2025июль 2025июнь 2025май 2025апрель 2025март 2025февраль 2025январь 2025декабрь 2024ноябрь 2024октябрь 2024сентябрь 2024август 2024июль 2024июнь 2024май 2024апрель 2024март 2024февраль 2024январь 2024декабрь 2023ноябрь 2023октябрь 2023сентябрь 2023август 2023июль 2023июнь 2023май 2023апрель 2023март 2023февраль 2023январь 2023декабрь 2022ноябрь 2022октябрь 2022сентябрь 2022август 2022июль 2022июнь 2022май 2022апрель 2022март 2022февраль 2022январь 2022декабрь 2021ноябрь 2021октябрь 2021сентябрь 2021август 2021июль 2021июнь 2021май 2021апрель 2021март 2021февраль 2021январь 2021декабрь 2020ноябрь 2020октябрь 2020сентябрь 2020август 2020июль 2020июнь 2020май 2020апрель 2020март 2020февраль 2020январь 2020декабрь 2019ноябрь 2019октябрь 2019сентябрь 2019август 2019июль 2019июнь 2019май 2019апрель 2019март 2019февраль 2019январь 2019декабрь 2018ноябрь 2018

Открытая публичная лента из поискового индекса ChatCrawler — «Google по публичному Telegram»; обновляется по мере обхода площадки. Время — UTC.

Только публичный контент, официальный API Telegram. О проекте · Вопросы · Границы индекса · Убрать страницу из выдачи · Каталог · Поиск · Как мы считаем