TGViewer
Блог* Блог* @dereference_pointer_there · 1.99K subscribers
Post #10730 3.15K
#prog

В #go тесты работают таким образом: программист делает файлы, имя которых оканчивается на _test.go, и внутри пишет функции вида:

func TestXxx(*testing.T)


(префикс Test обязателен), а команда go test автоматически эти тесты подхватывает и исполняет. Тип testing.T позволяет организовывать тесты: логгировать, запускать подтесты и досрочно прерывать тесты, как ошибочные.

К чему я это? В последней версии Go — Go 1.26.0, вышедшей 10 февраля — есть несколько изменений. Одно из них — у кучи функций из подпакетов пакета crypto описаны изменения в духе "функция для генерации ключей теперь игнорирует аргумент, переданный для генерации случайности, и использует криптографически безопасный источник случайности". Разумеется, для тестов желательна воспроизводимость. Но как этого добиться, если источник случайности игнорируется?

Для решения этого вопроса Go предлагает два решения.

Первое — это GODEBUG, костыль способ заставить программы на Go (скомпилированные!) использовать поведение из более старой версии. В данном случае предлагают добавить настройку cryptocustomrand=1. Настройки через GODEBUG не вечные и могут быть убраны в одном из будущих релизов. По этой причине этот способ выглядит не особо привлекательным.

Второе — это использовать новую функцию testing/cryptotest.SetGlobalRandom. Она устанавливает сид для источника случайности, который будет использоваться для всех криптографических функций из пакета crypto, полагающихся на случайные данные. Эти изменения действуют в пределах одного теста, запускаемого testing.T. Соответственно, для каждого теста, который желает воспроизводимости, эту функцию нужно вызывать явно в начале. Разумеется, как справедливо отмечено в документации,

Because SetGlobalRandom affects the whole process, it cannot be used in parallel tests or tests with parallel ancestors.


Воистину concurrent programming language!
  • 🤮 25
  • 😁 10
  • 🤩 3
More from @dereference_pointer_there
  1. Oct 9, 2026#prog #rust #meme Было в r/rustjerk, но сначала выложили в r/ClaudeCode
  2. Oct 9, 2026Welp
  3. Oct 9, 2026#prog #article Оттуда: The case against JPEG XL
  4. Oct 9, 2026#prog #article Shipping JPEG XL in Chrome Но в треде на r/rust пишут, что есть сомнения в…
  5. Oct 9, 2026#prog #rust #rustlib hashify v0.3: compile-time perfect hashing, now 4 to 12 times faster…
  6. Oct 9, 2026#prog #meme про... Slop
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 →