How to Go wrong
И новый опрос в этом году: https://survey.alchemer.eu/s3/90751981/Go-2024 Результаты прошлого, если вы пропустили: https://devcrowd.ru/go-2023/
И опять опрос, который вот-вот закончится: https://survey.alchemer.eu/s3/90907937/Go-2025
Результаты (весьма интересные) прошлого года: https://devcrowd.ru/go-2024
P.S. Мой поиск работы почти закончен. На следующей неделе начну выносить разные вспомогательные пакеты и утилиты из FerretDB в отдельные репо и рассказывать о них. Не переключайтесь.
Результаты (весьма интересные) прошлого года: https://devcrowd.ru/go-2024
P.S. Мой поиск работы почти закончен. На следующей неделе начну выносить разные вспомогательные пакеты и утилиты из FerretDB в отдельные репо и рассказывать о них. Не переключайтесь.
survey.alchemer.eu
Исследование рынка Go-разработчиков, 2025
Исследование рынка Go-разработчиков, 2025.
9👍27👏7👎1
Новая работа пока занимает гораздо больше времени, чем ожидалось, но вот наконец вынес первый пакет: https://github.com/AlekSi/lazyerrors – error wrapping для прагматично-ленивых программистов.
GitHub
GitHub - AlekSi/lazyerrors: Go package providing error wrapping with location information: file path, line number, and function/method…
Go package providing error wrapping with location information: file path, line number, and function/method name - AlekSi/lazyerrors
👍22🤔5👎2
How to Go wrong
Будет официальный SDK для Model Context Protocol’а на Go. Когда-нибудь: https://github.com/orgs/modelcontextprotocol/discussions/224#discussioncomment-12730162 Очень надеюсь, что будет лучше, чем существующие, которые как-будто с JS портированы один-в-один.
В это новости (и в анонсе выхода версии 1.0 https://github.com/modelcontextprotocol/go-sdk в октябре) как-то потерялся новый интересный пакет: https://github.com/google/jsonschema-go. Заметьте, что это «An official Google project», а не как обычно.
А вот ещё новость: Ян Ланс Тейлор, ушедший из Google, опубликовал свою библиотеку для JSON Schema: https://www.airs.com/blog/archives/675
Кажется, our long national nightmare (с качеством библиотек JSON Schema в Go) is over.
А вот ещё новость: Ян Ланс Тейлор, ушедший из Google, опубликовал свою библиотеку для JSON Schema: https://www.airs.com/blog/archives/675
Кажется, our long national nightmare (с качеством библиотек JSON Schema в Go) is over.
👏13
Получив уведомления о новых мучениях людей с кешом компиляции Go (нельзя настроить потребление места на диске и время хранения, нельзя отключить очистку), собрался, почистил и выложил тулзу: https://github.com/AlekSi/hardcache Если вы собираете проект с modernc.org/sqlite реже, чем раз в неделю, и вынуждены эту зависимость постоянно пересобирать – это для вас. 😄
Большую часть функционала, ещё сыроватую, вроде сетевого кеша через
Большую часть функционала, ещё сыроватую, вроде сетевого кеша через
GOCACHEPROG, пока убрал, но, со временем, тоже выложу.2👏20
Есть желающие потестировать новый навайбкоженный с Claude race detector без cgo?
GitHub
runtime/race: eliminate dependency on cmd/cgo · Issue #6508 · golang/go
There is a circular dependency between runtime/race and cmd/cgo in -race build. Everything depends on runtime/race, but runtime/race is a cgo package. Currently it's resolved by a hack in go to...
🤔6👍5
How to Go wrong
Есть желающие потестировать новый навайбкоженный с Claude race detector без cgo?
Ладно, на эту ерунду можно и не смотреть – там Даннинг-Крюгер в полный рост.
А вот на что стоит посмотреть, так это на написанный органическими человеками прототип race detector без cgo:
* https://github.com/golang/go/issues/57175#issuecomment-3559108965
* https://go-review.googlesource.com/c/go/+/718640
А вот на что стоит посмотреть, так это на написанный органическими человеками прототип race detector без cgo:
* https://github.com/golang/go/issues/57175#issuecomment-3559108965
* https://go-review.googlesource.com/c/go/+/718640
👍9
Это регулярное напоминание в общественных интересах: не профилируйте на macOS, даже если вот-же-он-прямо-тут-зачем-идти-на-сервер.
https://github.com/golang/go/issues/57722
https://github.com/golang/go/issues/57722
GitHub
golang/go
The Go programming language. Contribute to golang/go development by creating an account on GitHub.
2👍9😢3👎1
Вот пишете вы программу на Go, которая добавляет файлы в zip-архив. Используете https://pkg.go.dev/archive/zip, который под капотом использует https://pkg.go.dev/compress/flate. Документация на первый ничего не говорит про используемый уровень компрессии второго.
Две викторины:
Две викторины:
How to Go wrong
Вот пишете вы программу на Go, которая добавляет файлы в zip-архив. Используете https://pkg.go.dev/archive/zip, который под капотом использует https://pkg.go.dev/compress/flate. Документация на первый ничего не говорит про используемый уровень компрессии второго.…
Какой уровень компрессии DEFLATE используют методы типа https://pkg.go.dev/archive/zip#Writer.AddFS, если `RegisterCompressor` не используется?
Anonymous Quiz
29%
-1 (flate.DefaultCompression)
25%
0 (flate.NoCompression)
14%
1 (flate.BestSpeed)
8%
4 (просто так)
11%
5 (просто так)
6%
6 (просто так)
6%
9 (flate.BestCompression)
🤔13👎6
How to Go wrong
Вот пишете вы программу на Go, которая добавляет файлы в zip-архив. Используете https://pkg.go.dev/archive/zip, который под капотом использует https://pkg.go.dev/compress/flate. Документация на первый ничего не говорит про используемый уровень компрессии второго.…
Какой уровень компрессии DEFLATE используют методы типа https://pkg.go.dev/compress/flate#NewWriter, если в него передаётся -1 (DefaultCompression)?
Anonymous Quiz
29%
0 (NoCompression)
19%
1 (BestSpeed)
7%
4 (просто так)
25%
5 (просто так)
6%
6 (просто так)
15%
9 (BestCompression)
🤣31👎8
Forwarded from Go Update
🔐runtime/secret: secret.Do 🔐
Тем временем, абсолютно буднично и рутинно произошло хорошее: пакет
Собственно весь пакет пока состоит из одну функции:
• Весь стек который использовался во время работы горутины заполняется нулями. Если при работе стек «рос» (по факту — копировался в новое место) то прямо во время копии старый участок памяти рантайм заполнит нулями.
• Все регистры ЦПУ которые «могут содержать секреты» будут заполнены нулями после выхода. Подозреваю, что здесь речь идет о регистрах которые не используются самим рантаймом для служебных действий (верх, низ стека и прочая).
• Если в процессе работы переданной функции мы создаем объекты в хипе, то сразу после сборки мусора, их память будет заполнена нулями.
• Если внутри передаваемой функции произошла паника, подменяют стектрейс, что-бы скрыть любую информацию о переданной функции.
Для большинства это изменение ничего не меняет.
Но для тех кто работает с криптографией (включая TLS которое мы все используем в HTTPS, HTTP/2 и gRPC без флага insecure) это хорошая новость, которая позволяет усилить защиту приложений и усложнить чтение секретов злонамеренными акторами, даже если скомпрометирована вся железка. Плюс «надежную» очистку секретов часто требуют при сертификации софта в разных регионах нашей планеты.
П.С. Пакет пока доступен только для архитектур
П.П.С. Так-же пока пакет работает только под Linux.
Тем временем, абсолютно буднично и рутинно произошло хорошее: пакет
runtime/secret получил свою реализацию и будет доступен в Go 1.26 (правда будет скрыт за флагом GOEXPERIMENT=runtimesecret устанавливаемым во время компиляции).Собственно весь пакет пока состоит из одну функции:
secret.Do, которая принимает на вход функцию с сигнатурой func() и подчищает за ней следующие вещи на выходе из этой функции:• Весь стек который использовался во время работы горутины заполняется нулями. Если при работе стек «рос» (по факту — копировался в новое место) то прямо во время копии старый участок памяти рантайм заполнит нулями.
• Все регистры ЦПУ которые «могут содержать секреты» будут заполнены нулями после выхода. Подозреваю, что здесь речь идет о регистрах которые не используются самим рантаймом для служебных действий (верх, низ стека и прочая).
• Если в процессе работы переданной функции мы создаем объекты в хипе, то сразу после сборки мусора, их память будет заполнена нулями.
• Если внутри передаваемой функции произошла паника, подменяют стектрейс, что-бы скрыть любую информацию о переданной функции.
Для большинства это изменение ничего не меняет.
Но для тех кто работает с криптографией (включая TLS которое мы все используем в HTTPS, HTTP/2 и gRPC без флага insecure) это хорошая новость, которая позволяет усилить защиту приложений и усложнить чтение секретов злонамеренными акторами, даже если скомпрометирована вся железка. Плюс «надежную» очистку секретов часто требуют при сертификации софта в разных регионах нашей планеты.
П.С. Пакет пока доступен только для архитектур
amd64 и arm64 (если вы не поняли, что это значит, это хорошо тк вы точно попадаете в доступные архитектуры).П.П.С. Так-же пока пакет работает только под Linux.
GitHub
runtime/secret: implement new secret package · golang/go@a3fb92a
Implement secret.Do.
- When secret.Do returns:
- Clear stack that is used by the argument function.
- Clear all the registers that might contain secrets.
- On stack growth in secret mode, clea...
- When secret.Do returns:
- Clear stack that is used by the argument function.
- Clear all the registers that might contain secrets.
- On stack growth in secret mode, clea...
👍31👏8
Старожилы всхлипнули — Dave Cheney вернулся с новым квизом: https://dave.cheney.net/2025/11/27/pointer-pop-quiz
👍18🤔4
How to Go wrong
Получив уведомления о новых мучениях людей с кешом компиляции Go (нельзя настроить потребление места на диске и время хранения, нельзя отключить очистку), собрался, почистил и выложил тулзу: https://github.com/AlekSi/hardcache Если вы собираете проект с m…
Выпустил новую версию, позволяющую очищать кеш в фоне и указывать процент от полного размера диска:
В ближайшее время планирую добавить поддержку сжатия кеша (оттого и опросы про zip/deflate выше).
Если вы хлопали предыдущему посту, вы используете hardcache или просто хотите поддержать – поставьте звезду на GitHub’е, это очень важно. 😄
hardcache local trimd --unused-for=0 --max-size=5%В ближайшее время планирую добавить поддержку сжатия кеша (оттого и опросы про zip/deflate выше).
Если вы хлопали предыдущему посту, вы используете hardcache или просто хотите поддержать – поставьте звезду на GitHub’е, это очень важно. 😄
1👏7👍2👎1
Начинаю новый проект. Выбираю зависимости. Опять плачу от OpenTelemetry API/SDK. Но об этом потом.
А пока скажите: что сейчас стоит взять для test assertions? Раньше из проекта в проект тащил testify, но там как-то багов много, да и сделать что-то на дженериках, казалось бы, можно. Есть что-то получше?
А пока скажите: что сейчас стоит взять для test assertions? Раньше из проекта в проект тащил testify, но там как-то багов много, да и сделать что-то на дженериках, казалось бы, можно. Есть что-то получше?
🤔9👍1
Всё-таки, вещественные числа и IEEE 754 — это портал в ад: https://github.com/golang/go/issues/56600
GitHub
math: math.Log does not handle subnormal floating point number on amd64 · Issue #56600 · golang/go
What version of Go are you using (go version)? $ go version go version go1.18.3 darwin/amd64 Does this issue reproduce with the latest release? Yes What operating system and processor architecture ...