How to Go wrong
1.65K subscribers
12 photos
1 video
210 links
Download Telegram
Вот пишете вы программу на Go, которая добавляет файлы в zip-архив. Используете https://pkg.go.dev/archive/zip, который под капотом использует https://pkg.go.dev/compress/flate. Документация на первый ничего не говорит про используемый уровень компрессии второго.

Две викторины:
Forwarded from Go Update
🔐runtime/secret: secret.Do 🔐

Тем временем, абсолютно буднично и рутинно произошло хорошее: пакет runtime/secret получил свою реализацию и будет доступен в Go 1.26 (правда будет скрыт за флагом GOEXPERIMENT=runtimesecret устанавливаемым во время компиляции).

Собственно весь пакет пока состоит из одну функции: secret.Do, которая принимает на вход функцию с сигнатурой func() и подчищает за ней следующие вещи на выходе из этой функции:
Весь стек который использовался во время работы горутины заполняется нулями. Если при работе стек «рос» (по факту — копировался в новое место) то прямо во время копии старый участок памяти рантайм заполнит нулями.
Все регистры ЦПУ которые «могут содержать секреты» будут заполнены нулями после выхода. Подозреваю, что здесь речь идет о регистрах которые не используются самим рантаймом для служебных действий (верх, низ стека и прочая).
Если в процессе работы переданной функции мы создаем объекты в хипе, то сразу после сборки мусора, их память будет заполнена нулями.
Если внутри передаваемой функции произошла паника, подменяют стектрейс, что-бы скрыть любую информацию о переданной функции.

Для большинства это изменение ничего не меняет.

Но для тех кто работает с криптографией (включая TLS которое мы все используем в HTTPS, HTTP/2 и gRPC без флага insecure) это хорошая новость, которая позволяет усилить защиту приложений и усложнить чтение секретов злонамеренными акторами, даже если скомпрометирована вся железка. Плюс «надежную» очистку секретов часто требуют при сертификации софта в разных регионах нашей планеты.

П.С. Пакет пока доступен только для архитектур amd64 и arm64 (если вы не поняли, что это значит, это хорошо тк вы точно попадаете в доступные архитектуры).
П.П.С. Так-же пока пакет работает только под Linux.
👍32👏8
Старожилы всхлипнули — Dave Cheney вернулся с новым квизом: https://dave.cheney.net/2025/11/27/pointer-pop-quiz
👍19🤔4
How to Go wrong
Получив уведомления о новых мучениях людей с кешом компиляции Go (нельзя настроить потребление места на диске и время хранения, нельзя отключить очистку), собрался, почистил и выложил тулзу: https://github.com/AlekSi/hardcache Если вы собираете проект с m…
Выпустил новую версию, позволяющую очищать кеш в фоне и указывать процент от полного размера диска:

hardcache local trimd --unused-for=0 --max-size=5%

В ближайшее время планирую добавить поддержку сжатия кеша (оттого и опросы про zip/deflate выше).

Если вы хлопали предыдущему посту, вы используете hardcache или просто хотите поддержать – поставьте звезду на GitHub’е, это очень важно. 😄
1👏7👍2👎1
Начинаю новый проект. Выбираю зависимости. Опять плачу от OpenTelemetry API/SDK. Но об этом потом.

А пока скажите: что сейчас стоит взять для test assertions? Раньше из проекта в проект тащил testify, но там как-то багов много, да и сделать что-то на дженериках, казалось бы, можно. Есть что-то получше?
🤔9👍1
Если вы, как и я, задавались вопросом почему database/sql совсем не развивается и имеет кучу нерешённых проблем, то вот чем занимается его maintainer: https://github.com/kardianos/primovivendi/blob/e5d36c368cc2b16ad0b3ac2acd746dd0e4e9b561/book1-2/outline.md
🤣22🤔7😢4👍3
Rob Pike не очень любит AI: https://imgur.com/rob-pike-goes-nuclear-over-genai-nUJCI3o
3👍17🤔5👎1😢1
How to Go wrong
Rob Pike не очень любит AI: https://imgur.com/rob-pike-goes-nuclear-over-genai-nUJCI3o
Андрей Карпатый не разбирается в AI
1😢4🤣3👍2🤔2