TGViewer
Go Update Go Update @go_update · 3.23K subscribers
Post #32 2.61K
🐞reflect: Value.IsZero should report true for negative zero

Довольно интересный баг в реализации reflect.Value.IsZero который происходит из попытки ответить на вопрос: а что выведет вот такой код?

val := math.Copysign(0, -1) // Создаем float64(-0.0)
println(val == 0, reflect.ValueOf(val).IsZero())

В Go 1.20 и 1.21 ответ будет true false

Реализация обработки чисел с плавающей точкой внутри IsZero в версиях 1.21 и ниже вызывает функцию math.Float64bits и затем сравнивает результат с 0. Это верно для общего случая, но вот для числа -0 результат вызова этой функции будет совсем не 0. При этом Go компилятор корректно обрабатывает такое сравнение в обычном коде, что и приводит к разным результатам.

Баг уже исправлен и фикс будет включен в Go 1.22. Так как этот фикс приводит к изменению поведения его скорее всего не будет в багфиксах существующих релизов.

П.С: Про интересное скоро будет, мне пока чудовищно не хватает времени.
GitHub reflect: Value.IsZero should report true for negative zero · Issue #61827 · golang/go I discovered this while exploring #61372 (comment). In that comment, I asked whether v == zero is identical to reflect.ValueOf(&v).Elem().IsZero(). And the answer is unfortunately, "no&quo...
  • 😨 17
  • 🔥 2
  • 👍 1
More from @go_update
  1. Aug 22, 2026Об изоляции LLM Да, это ещё один пост про работу с Codex/Claude/GLM/Qwen/DeepSeek и прочая…
  2. Aug 11, 2026И вот эти два минуса выглядят нерешенными (на данный момент времени). Можно ли их решить в…
  3. Aug 11, 2026🎂 Вечерний пост о том, что сегодня мне исполнилось 34. Прошёл еще один год, а значит врем…
  4. Jul 13, 2026📝 testing: allow examples with any signature Небольшое «Quality of Life» предложение. Сут…
  5. May 14, 2026📝 net/http/httptest: synctest support Я уже писал про пакет synctest и его возможности. Э…
  6. May 13, 2026Я редко пишу сюда о вещах которые не относятся к Go, но тут у меня появилась хорошая стать…
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 →