ru
Feedback

Не попадитесь на канал ботавода! Telemetrio находит и помечает такие каналы 👉 Хотите видеть метку — оформите подписку

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

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

Открыть в Telegram

Все самое полезное для Go-разработчика в одном канале. Учиться у нас: clc.to/qaSdww По рекламе: @tproger_sales_bot Для обратной связи: @proglibrary_feeedback_bot РКН: https://gosuslugi.ru/snet/67a4a8c24689c2151c752af0 Заявка: 8137752389

Больше

📈 Аналитический обзор Telegram-канала Библиотека Go-разработчика | Golang

Канал Библиотека Go-разработчика | Golang (@goproglib) языкового сегмента Русский является активным участником. Сейчас сообщество объединяет 23 970 подписчиков, занимая 5 523 место в категории Технологии и приложения и 27 298 место в регионе Россия.

📊 Показатели аудитории и динамика

С момента создания невідомо проект демонстрирует стремительный рост, собрав аудиторию из 23 970 подписчиков.

Согласно последним данным от 29 октября, 2026, канал показывает стабильную активность. За последние 30 дней изменение числа участников составило -103, а за последние 24 часа — -11, при этом общий охват остаётся высоким.

  • Статус верификации: Не верифицирован
  • Уровень вовлечённости (ER): Средний показатель вовлечённости аудитории составляет 14.82%. В первые 24 часа после публикации контент обычно набирает 7.41% реакций от общего числа подписчиков.
  • Охват публикаций: В среднем каждый пост получает 3 553 просмотров. В течение первых суток публикация набирает 1 777 просмотров.
  • Реакции и взаимодействия: Аудитория активно поддерживает контент: среднее количество реакций на один пост — 4.
  • Тематические интересы: Контент сосредоточен на ключевых темах, таких как навигация, лучшее_из_библиотеки_2025, git, string, golive.

📝 Описание и контентная политика

Автор описывает ресурс как площадку для выражения субъективного мнения:
“Все самое полезное для Go-разработчика в одном канале. Учиться у нас: clc.to/qaSdww По рекламе: @tproger_sales_bot Для обратной связи: @proglibrary_feeedback_bot РКН: https://gosuslugi.ru/snet/67a4a8c24689c2151c752af0 Заявка: 8137752389”

Благодаря высокой частоте обновлений (последние данные получены 30 октября, 2026) канал поддерживает актуальность и высокий уровень охвата публикаций. Аналитика показывает, что аудитория активно взаимодействует с контентом, что делает его важной точкой влияния в категории Технологии и приложения.

23 970
Подписчики
-1124 часа
-677 дней
-10330 дней
Привлечение подписчиков
окт. '26
октябрь '26
+154
в 7 каналах
сентябрь '26
+198
в 0 каналах
Get PRO
август '26
+260
в 1 каналах
Get PRO
июль '26
+221
в 2 каналах
Get PRO
июнь '26
+171
в 3 каналах
Get PRO
май '26
+288
в 3 каналах
Get PRO
апрель '26
+249
в 1 каналах
Get PRO
март '26
+216
в 1 каналах
Get PRO
февраль '26
+487
в 7 каналах
Get PRO
январь '26
+346
в 3 каналах
Get PRO
декабрь '25
+370
в 4 каналах
Get PRO
ноябрь '25
+384
в 4 каналах
Get PRO
октябрь '25
+331
в 2 каналах
Get PRO
сентябрь '25
+290
в 0 каналах
Get PRO
август '25
+316
в 4 каналах
Get PRO
июль '25
+317
в 2 каналах
Get PRO
июнь '25
+315
в 0 каналах
Get PRO
май '25
+391
в 5 каналах
Get PRO
апрель '25
+358
в 4 каналах
Get PRO
март '25
+625
в 53 каналах
Get PRO
февраль '25
+527
в 35 каналах
Get PRO
январь '25
+517
в 37 каналах
Get PRO
декабрь '24
+591
в 40 каналах
Get PRO
ноябрь '24
+605
в 52 каналах
Get PRO
октябрь '24
+499
в 36 каналах
Get PRO
сентябрь '24
+676
в 36 каналах
Get PRO
август '24
+580
в 36 каналах
Get PRO
июль '24
+586
в 37 каналах
Get PRO
июнь '24
+467
в 29 каналах
Get PRO
май '24
+674
в 35 каналах
Get PRO
апрель '24
+771
в 36 каналах
Get PRO
март '24
+901
в 31 каналах
Get PRO
февраль '24
+729
в 31 каналах
Get PRO
январь '24
+863
в 27 каналах
Get PRO
декабрь '23
+850
в 29 каналах
Get PRO
ноябрь '23
+608
в 10 каналах
Get PRO
октябрь '23
+697
в 25 каналах
Get PRO
сентябрь '23
+723
в 0 каналах
Get PRO
август '23
+648
в 0 каналах
Get PRO
июль '23
+503
в 0 каналах
Get PRO
июнь '23
+422
в 0 каналах
Get PRO
май '23
+568
в 0 каналах
Get PRO
апрель '23
+365
в 0 каналах
Get PRO
март '23
+841
в 0 каналах
Get PRO
февраль '23
+392
в 0 каналах
Get PRO
январь '23
+395
в 0 каналах
Get PRO
декабрь '22
+384
в 0 каналах
Get PRO
ноябрь '22
+491
в 0 каналах
Get PRO
октябрь '22
+256
в 0 каналах
Get PRO
сентябрь '22
+292
в 0 каналах
Get PRO
август '22
+394
в 0 каналах
Get PRO
июль '22
+472
в 0 каналах
Get PRO
июнь '22
+443
в 0 каналах
Get PRO
май '22
+176
в 0 каналах
Get PRO
апрель '22
+328
в 0 каналах
Get PRO
март '22
+242
в 0 каналах
Get PRO
февраль '22
+135
в 0 каналах
Get PRO
январь '22
+236
в 0 каналах
Get PRO
декабрь '21
+245
в 0 каналах
Get PRO
ноябрь '21
+219
в 0 каналах
Get PRO
октябрь '21
+215
в 0 каналах
Get PRO
сентябрь '21
+290
в 0 каналах
Get PRO
август '21
+298
в 0 каналах
Get PRO
июль '21
+281
в 0 каналах
Get PRO
июнь '21
+196
в 0 каналах
Get PRO
май '21
+389
в 0 каналах
Get PRO
апрель '21
+336
в 0 каналах
Get PRO
март '21
+280
в 0 каналах
Get PRO
февраль '21
+258
в 0 каналах
Get PRO
январь '21
+262
в 0 каналах
Get PRO
декабрь '20
+6 566
в 0 каналах
Дата
Привлечение подписчиков
Упоминания
Каналы
30 октября0
29 октября+3
28 октября+3
27 октября+5
26 октября+1
25 октября+1
24 октября+3
23 октября+2
22 октября+8
21 октября+5
20 октября+3
19 октября+5
18 октября+3
17 октября+6
16 октября+5
15 октября+2
14 октября+10
13 октября+8
12 октября+13
11 октября+11
10 октября+7
09 октября+8
08 октября+4
07 октября+2
06 октября+12
05 октября+6
04 октября+6
03 октября+3
02 октября+5
01 октября+4
Посты канала
Burst — не число одновременно работающих запросов rate.NewLimiter(r, b) из golang.org/x/time/rate создаёт полную корзину на b
Burst — не число одновременно работающих запросов rate.NewLimiter(r, b) из golang.org/x/time/rate создаёт полную корзину на b токенов. Она пополняется со скоростью r токенов в секунду. Начальный запас разрешает короткий всплеск. Allow() сразу откажет, если токена нет. Wait(ctx) подождёт, учитывая отмену и дедлайн. Для общего бюджета используйте общий экземпляр лимитера, а не новый в каждом обработчике. Долгие операции всё равно могут выполняться параллельно. Число занятых горутин ограничивайте отдельно. Между репликами сервиса этот лимитер состояние не делит. Документация rate 📍 Навигация: Вакансии • Задачи • Собесы 🐸 Библиотека Go-разработчика

2
Конфиг должен быть старым или новым, а не записанным наполовину Прямая перезапись файла может показать читателю неполные данн
Конфиг должен быть старым или новым, а не записанным наполовину Прямая перезапись файла может показать читателю неполные данные. github.com/google/renameio/v2 решает другую задачу: атомарно заменяет файл подготовленной версией. renameio.WriteFile берёт на себя временный файл, корректную замену и уборку при ошибке. Читатель не должен увидеть промежуточное содержимое. Но атомарность не равна сохранности после отключения питания: durability пакет не обещает. На Windows он не экспортирует функций. А права в v2 учитывают umask процесса. README и ограничения renameio 📍 Навигация: Вакансии • Задачи • Собесы 🐸 Библиотека Go-разработчика
1 575
3
SQL тормозит? Сначала посмотрите на очередь пула sql.DB — пул соединений. Когда достигнут SetMaxOpenConns, следующая операция
SQL тормозит? Сначала посмотрите на очередь пула sql.DB — пул соединений. Когда достигнут SetMaxOpenConns, следующая операция ждёт свободное соединение, ещё не выполняя SQL. У db.Stats() есть InUse, Idle и накопительные WaitCount, WaitDuration. Сравните счётчики в начале и конце интервала: растут ли ожидания вместе с задержкой сервиса? Это время ожидания соединения, а не выполнения запроса в БД. Не повышайте лимит вслепую. Учитывайте возможности БД и число реплик сервиса. SetMaxIdleConns управляет оставленными свободными соединениями, а не общим потолком. Управление пулом 📍 Навигация: Вакансии • Задачи • Собесы 🐸 Библиотека Go-разработчика
2 061
4
Тело запроса слишком большое. Не маскируйте это под EOF io.LimitReader прекращает чтение на лимите, как будто данные закончил
Тело запроса слишком большое. Не маскируйте это под EOF io.LimitReader прекращает чтение на лимите, как будто данные закончились. Для входящего HTTP-body есть http.MaxBytesReader(w, r.Body, n): попытка прочитать сверх лимита возвращает *http.MaxBytesError. Оберните r.Body до чтения. Превышение проверяется именно при чтении, а не при создании обёртки. Один json.Decoder.Decode может оставить хвост непрочитанным. Обработчик сам распознаёт ошибку и выбирает ответ 413. Лимит байтов не заменяет таймаут чтения. Документация MaxBytesReader 📍 Навигация: Вакансии • Задачи • Собесы 🐸 Библиотека Go-разработчика
2 352
5
Динозавр держится за ВМ и снапшоты по расписанию, Археолог давно не помнит, что и где у него крутится, а Повелителю облаков у
Динозавр держится за ВМ и снапшоты по расписанию, Археолог давно не помнит, что и где у него крутится, а Повелителю облаков уютно до первого кругленького счёта. Это три из десяти типов инфраструктуры в тесте от команды Deckhouse. Ответьте на 5 вопросов, узнайте свой тип и отправьте ссылку на результат команде. Посмотрим, совпадёт ли он у коллег. → Пройти тест и узнать свой тип
2 586
6
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-разработчика
2 619
7
📌 Один курс — хорошее вложение в себя. Два по той же цене — ещё лучше. В Proglib Academy действует акция: покупаешь один кур
📌 Один курс — хорошее вложение в себя. Два по той же цене — ещё лучше. В Proglib Academy действует акция: покупаешь один курс, а второй получаешь в подарок. Например, можно совместить два направления по работе с ИИ: 💥 ИИ для разработчиков — применение нейросетей в повседневной разработке: работа с кодом, тестирование и ревью. 💥 Разработка ИИ-агентов — архитектура агентов и создание собственных AI-решений. 📍 Разница в цене — почти 50 тысяч рублей. Можно освоить больше, не выходя за рамки запланированного бюджета. А если тебе интереснее Python, алгоритмы, backend или DevOps — выбирай другую пару курсов из каталога. Акция действует до 31 октября включительно ⏳ ⏮️ Пора прокачать свой стек
2 522
8
Тест упал. Покажите, что именно разошлось Два больших объекта в логе приходится сравнивать глазами. 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-разработчика
2 486
9
singleflight: один запрос к источнику вместо одинаковых параллельных Кеш опустел, и несколько обработчиков одновременно пошли за одним товаром в БД. Пока первый запрос ещё работает, остальные повторяют ту же работу. Для такой ситуации есть golang.org/x/sync/singleflight. Вызов Group.Do(key, fn) объединяет обращения с одинаковым ключом: выполняется одна функция, остальные ждут и получают её результат вместе с ошибкой. Ключи разные — работа идёт независимо. Все обработчики должны использовать одну и ту же Group, а не создавать её заново на каждый запрос. Ключ описывает всё, от чего зависит результат. Если данные различаются между арендаторами, одного ID товара мало. Например, tenant:42:product:7 отделяет его от такого же товара другого арендатора. Готовый результат singleflight не хранит: следующий вызов после завершения работы снова запустит функцию. Механизм действует внутри одного процесса и не ограничивает общее число запросов по разным ключам. А флаг shared сообщает, что результат получили несколько вызовов, а не что сработал кеш. Документация singleflight 📍 Навигация: Вакансии • Задачи • Собесы 🐸 Библиотека Go-разработчика
2 716
10
💾 Команда Dolt ускорила WAL сочетанием fdatasync и записи нулей Заменить fsync на fdatasync оказалось недостаточно. Команда
💾 Команда Dolt ускорила WAL сочетанием fdatasync и записи нулей Заменить fsync на fdatasync оказалось недостаточно. Команда Go-базы Dolt также стала заранее записывать 4 МиБ нулей при расширении журнала. Следующие записи перезаписывают готовую область, реже требуя синхронизации метаданных. Во внутренних тестах небольших последовательных записей это дало 10–40% прироста. Помогло сочетание Ext4 и сетевого диска с заметной задержкой, но свободной пропускной способностью. На Btrfs и OpenZFS такого выигрыша не увидели. А предварительная запись нулей увеличивает объём записи — вплоть до двух раз. При упоре в пропускную способность оптимизация может навредить. Полезный разбор для тех, кто пишет хранилища и журналы на Go. На дату статьи изменение было в main, но ещё не вошло в релиз Dolt. 📍 Навигация: Вакансии • Задачи • Собесы 🐸 Библиотека Go-разработчика
2 893
11
😎 Выбираешь один курс, второй получаешь бесплатно. Баг? Нет, акция! До 31 октября в Proglib Academy можно выбрать два курса
😎 Выбираешь один курс, второй получаешь бесплатно. Баг? Нет, акция! До 31 октября в Proglib Academy можно выбрать два курса и заплатить только за один. Например, можно совместить: 💥 ИИ для разработчиков — применение нейросетей в повседневной разработке: работа с кодом, тестирование и ревью. 💥 Разработка ИИ-агентов — архитектура агентов и создание собственных AI-решений. Вместе курсы стоят 108 000 ₽, но по акции оба обойдутся в 59 000 ₽. Экономия — 49 000 ₽ 🔥 Интересуют Python и ИИ или алгоритмы и архитектура? Можно выбрать любые два курса из каталога. Акция действует до 31 октября включительно ⏳ ⏬ Собрать свой учебный билд
2 835
12
⚙️ Go 1.27 открывает SIMD-инструкции ARM и WebAssembly без ассемблера Переносимый SIMD скрывает различия процессоров. Но для
⚙️ 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-разработчика
2 948
13
🛠 gopls спрашивает, какие теги добавить полям структуры Раньше действие Add struct tags добавляло json-теги в camelCase. Теп
🛠 gopls спрашивает, какие теги добавить полям структуры Раньше действие Add struct tags добавляло json-теги в camelCase. Теперь gopls умеет уточнять параметры: например, выбрать json,yaml,db и snake_case. Ставите курсор на структуру, вызываете действие, отвечаете на два вопроса — сервер генерирует теги для её полей. При удалении тоже можно выбрать конкретные ключи, сохранив остальные. Для интерактивной работы команда рекомендует gopls 0.24.0 и Go-расширение VS Code 0.56.0. Одного обновления сервера недостаточно: редактор должен поддерживать новые диалоги. В статье показаны и другие сценарии, но их статус различается. Перенос объявлений демонстрируется как preview, а изменение сигнатуры пока в планах. Проверяйте доступность нужного действия, прежде чем рассчитывать на него в рабочем процессе. 📍 Навигация: Вакансии • Задачи • Собесы 🐸 Библиотека Go-разработчика
3 156
14
🌐 Go 1.27: закрыли Body — соединение ещё пригодится Клиенту нужен только статус ответа, поэтому тело он не читает. До Go 1.2
🌐 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-разработчика
3 682
15
🔎 ReverseProxy: заголовок добавили, а backend его не увидел Прокси записывает X-App-User в Director. Клиент присылает Connec
🔎 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-разработчика
3 764
16
🔎 go test запускает и код зависимостей Загрузка Go-модуля не выполняет его init(). Но когда зависимость импортирована в тест
🔎 go test запускает и код зависимостей Загрузка Go-модуля не выполняет его init(). Но когда зависимость импортирована в тестовый бинарник, её инициализация запускается до тестов — с доступом к окружению процесса. Жюль Робино проверил это на собственной тестовой зависимости: при сборке она молчала, а во время go test её init() прочитал переменные окружения. 🔴 Если тестовый job получает ключ деплоя, импортированная зависимость тоже может к нему обратиться. Автор предлагает разделять тесты и публикацию, выдавая каждому job только нужные полномочия. Проверять стоит и новые зависимости. govulncheck ищет известные уязвимости, а capslock показывает возможности кода и пути вызовов: доступ к сети, файлам, запуск процессов. Неожиданная возможность — повод изучить её использование. Контрольная сумма подтверждает целостность модуля, но сама по себе не доказывает безопасность его поведения. 📍 Навигация: Вакансии • Задачи • Собесы 🐸 Библиотека Go-разработчика
3 735
17
🧪 Зелёный тест ещё нужно проверить Функция IsSorted должна отличать отсортированный слайс от неотсортированного. Один тест н
🧪 Зелёный тест ещё нужно проверить Функция IsSorted должна отличать отсортированный слайс от неотсортированного. Один тест на [1, 2, 3] пропустит реализацию, которая всегда возвращает true. В разборе TDD на Go Джон Арундел сначала пишет тест и минимальную реализацию с return false. Тест компилируется и падает: теперь видно, что он реагирует на эту ошибку. Затем автор добавляет неотсортированный вход и постепенно расширяет набор случаев. Повторяющиеся числа проверяют допустимость равных соседей, отрицательные — ошибочную начальную границу, пустой слайс — обращение к несуществующему элементу. 🔴 Каждый найденный баг сначала получает падающий тест, затем исправление. Зелёный прогон показывает соответствие проверенным случаям; полноту набора нужно оценивать отдельно. Самописная IsSorted здесь служит упражнением по TDD. 📍 Навигация: Вакансии • Задачи • Собесы 🐸 Библиотека Go-разработчика
3 608
18
💡 slog: убираем секретный атрибут до записи лога Токен не должен попадать в лог, но приходит вместе с остальными полями запр
💡 slog: убираем секретный атрибут до записи лога Токен не должен попадать в лог, но приходит вместе с остальными полями запроса. У стандартных JSONHandler и TextHandler есть HandlerOptions.ReplaceAttr: callback преобразует атрибут перед записью. Возврат пустого slog.Attr{} удаляет поле. Фильтр на карточке убирает access_token и внутри группы auth, сохраняя соседний user. Названия открытых групп доступны в аргументе groups. 🔴 Этот пример проверяет имя ключа. Если секрет уже вставлен в текст сообщения, например token=demo-secret, он останется в msg. Передавайте чувствительные данные отдельными атрибутами и продумывайте фильтр для своей схемы логов. ➡️ Документация ReplaceAttr 📍 Навигация: Вакансии • Задачи • Собесы 🐸 Библиотека Go-разработчика
3 743
19
🧑‍💻 Какие навыки помогают вам в разработке в 2026 году? Что вы чаще используете в работе? В каких задачах помогает ИИ, а где проще справиться самостоятельно? Мы решили собрать портрет современного разработчика — и приглашаем вас поделиться своим опытом. Расскажите, какие навыки вам пригодились и как вы используете ИИ. Если обходите его стороной, нам тоже интересно узнать почему. Опрос анонимный и займёт около 5 минут. Результаты опубликуем в общем большом исследовании. 👉 Пройти опрос
2 944
20
🧪 Тестируем файловый код без временных каталогов Функция читает файлы? Если она принимает fs.FS, в тест можно передать fstes
🧪 Тестируем файловый код без временных каталогов Функция читает файлы? Если она принимает fs.FS, в тест можно передать fstest.MapFS: пути и содержимое задаются прямо в map. Родительские каталоги создаются в этой модели автоматически. В примере на карточке два файла. banner.txt читается как hello, а отсутствующий путь возвращает ошибку, которую можно проверить через errors.Is(err, fs.ErrNotExist). fstest.TestFS проверяет поведение файловой системы и наличие перечисленных файлов. Содержимое и логику вашей функции нужно проверять отдельно. 🔴 Не меняйте map одновременно с файловыми операциями: это data race. Для большой файловой системы такая модель неудобна — обход каталогов перебирает всю map. ➡️ MapFS и TestFS в документации 📍 Навигация: Вакансии • Задачи • Собесы 🐸 Библиотека Go-разработчика
3 753