How to Go wrong
Точно не за горами: https://www.tgoop.com/go_perf/330
Не пройдёт и двух лет, как
Хороший интерактивный обзор: https://antonz.org/go-json-v2/
encoding/json/v2 завезут в стандартную библиотеку Go 1.25 (но пока через GOEXPERIMENT).Хороший интерактивный обзор: https://antonz.org/go-json-v2/
antonz.org
JSON evolution in Go: from v1 to v2
Reviewing the key changes in json/v2.
👍13
Теперь людям, продолжающим думать, что в Go нет дженериков, можно не просто ссылку на документацию кидать, а сразу на этот блог пост: https://go.dev/blog/generic-interfaces
(и обратите внимание на автора — это https://github.com/Merovius, которого вы знаете по всем обсуждениям, и он даже не сотрудник Гугла)
(и обратите внимание на автора — это https://github.com/Merovius, которого вы знаете по всем обсуждениям, и он даже не сотрудник Гугла)
go.dev
Generic interfaces - The Go Programming Language
Adding type parameters to interface types is surprisingly powerful
👍7👏4😢2
How to Go wrong
Мы катились к этому больше года, и, наконец, докатились: * https://blog.ferretdb.io/ferretdb-releases-v2-faster-more-compatible-mongodb-alternative/ * https://opensource.microsoft.com/blog/2025/01/23/documentdb-open-source-announcement/ * https://github.c…
Долго молчал из-за дел на работе, про которые наконец-то можно начать говорить:
* MongoDB Inc. подали на нас в суд. 🥁
* Код DocumentDB задонатили в Linux Foundation. 🥁
* LF начала работу над открытым стандартом для MongoDB-совместимого языка запросов. 🥁
Нас, правда, этой волной может напрочь снести.
Потом напишу больше, а пока, пожалуйста, пошарьте это (если можно, то share, а не просто like), даже если вы далеки от мира БД: https://www.linkedin.com/feed/update/urn:li:share:7365677213309976577/ Чем больше людей об этом узнает, тем лучше.
Про Go скоро опять начну писать, не переключайтесь.
* MongoDB Inc. подали на нас в суд. 🥁
* Код DocumentDB задонатили в Linux Foundation. 🥁
* LF начала работу над открытым стандартом для MongoDB-совместимого языка запросов. 🥁
Нас, правда, этой волной может напрочь снести.
Потом напишу больше, а пока, пожалуйста, пошарьте это (если можно, то share, а не просто like), даже если вы далеки от мира БД: https://www.linkedin.com/feed/update/urn:li:share:7365677213309976577/ Чем больше людей об этом узнает, тем лучше.
Про Go скоро опять начну писать, не переключайтесь.
Linkedin
In 2021, we founded FerretDB with a bold vision: to return the document database market to its open source roots by creating the…
In 2021, we founded FerretDB with a bold vision: to return the document database market to its open source roots by creating the leading open source alternative to MongoDB, built on Postgres.
For years, we tirelessly advocated for an open standard. We built…
For years, we tirelessly advocated for an open standard. We built…
1😢35👍7🤔2🤣1
В общем, нас этой волной снесло. После четырёх лет разработки open source альтернативы MongoDB и совместимого с ней открытого стандарта не быть приглашёнными ни в технический комитет, ни в сам проект (сайт которого прямо использует наши слова!) – это просто нож в спину. Ни сил, ни желания, (ни денег) заниматься этим с такими «партнёрами» больше нет.
Ищу работу. В первую очередь рассматриваю предложения с переездом во Францию или западную Европу. https://www.linkedin.com/posts/alexeypalazhchenko_opentowork-activity-7370777229657661440-E1po/ Буду очень благодарен за like, share, и endorsement.
В ближайшее время буду выносить разные интересные штуки из кода FerretDB в отдельные библиотеки и писать про них в канал. Не переключайтесь.
Ищу работу. В первую очередь рассматриваю предложения с переездом во Францию или западную Европу. https://www.linkedin.com/posts/alexeypalazhchenko_opentowork-activity-7370777229657661440-E1po/ Буду очень благодарен за like, share, и endorsement.
В ближайшее время буду выносить разные интересные штуки из кода FerretDB в отдельные библиотеки и писать про них в канал. Не переключайтесь.
Linkedin
#opentowork | Alexey Palazhchenko
Hello everyone,
I'm currently exploring new opportunities and would value your assistance. Whether you come across any openings or simply wish to reconnect, feel free to drop me a message or leave a comment below. I'm eager to re-establish connections. #OpenToWork…
I'm currently exploring new opportunities and would value your assistance. Whether you come across any openings or simply wish to reconnect, feel free to drop me a message or leave a comment below. I'm eager to re-establish connections. #OpenToWork…
😢100👍7🤣2
How to Go wrong
Не пройдёт и двух лет, как encoding/json/v2 завезут в стандартную библиотеку Go 1.25 (но пока через GOEXPERIMENT). Хороший интерактивный обзор: https://antonz.org/go-json-v2/
json/v2 всё ближе и ближе: https://go.dev/blog/jsonv2-expgo.dev
A new experimental Go API for JSON - The Go Programming Language
Go 1.25 introduces experimental support for encoding/json/jsontext and encoding/json/v2 packages.
🇺🇦 Go performance channel
proposal: runwww.tgoop.com/trace: flight recording #golang by Michael Knyszek https://github.com/golang/go/issues/63185 (thanks to Ehsan)
go.dev
Flight Recorder in Go 1.25 - The Go Programming Language
Go 1.25 introduces a new tool in the diagnostic toolbox, flight recording.
👍11
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
runwww.tgoop.com/race: eliminate dependency on cmd/cgo · Issue #6508 · golang/go
There is a circular dependency between runwww.tgoop.com/race and cmd/cgo in -race build. Everything depends on runwww.tgoop.com/race, but runwww.tgoop.com/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
30%
-1 (flate.DefaultCompression)
24%
0 (flate.NoCompression)
14%
1 (flate.BestSpeed)
8%
4 (просто так)
10%
5 (просто так)
7%
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)
18%
1 (BestSpeed)
7%
4 (просто так)
25%
5 (просто так)
6%
6 (просто так)
14%
9 (BestCompression)
🤣31👎8
Forwarded from Go Update
🔐runwww.tgoop.com/secret: secret.Do 🔐
Тем временем, абсолютно буднично и рутинно произошло хорошее: пакет
Собственно весь пакет пока состоит из одну функции:
• Весь стек который использовался во время работы горутины заполняется нулями. Если при работе стек «рос» (по факту — копировался в новое место) то прямо во время копии старый участок памяти рантайм заполнит нулями.
• Все регистры ЦПУ которые «могут содержать секреты» будут заполнены нулями после выхода. Подозреваю, что здесь речь идет о регистрах которые не используются самим рантаймом для служебных действий (верх, низ стека и прочая).
• Если в процессе работы переданной функции мы создаем объекты в хипе, то сразу после сборки мусора, их память будет заполнена нулями.
• Если внутри передаваемой функции произошла паника, подменяют стектрейс, что-бы скрыть любую информацию о переданной функции.
Для большинства это изменение ничего не меняет.
Но для тех кто работает с криптографией (включая TLS которое мы все используем в HTTPS, HTTP/2 и gRPC без флага insecure) это хорошая новость, которая позволяет усилить защиту приложений и усложнить чтение секретов злонамеренными акторами, даже если скомпрометирована вся железка. Плюс «надежную» очистку секретов часто требуют при сертификации софта в разных регионах нашей планеты.
П.С. Пакет пока доступен только для архитектур
П.П.С. Так-же пока пакет работает только под Linux.
Тем временем, абсолютно буднично и рутинно произошло хорошее: пакет
runwww.tgoop.com/secret получил свою реализацию и будет доступен в Go 1.26 (правда будет скрыт за флагом GOEXPERIMENT=runtimesecret устанавливаемым во время компиляции).Собственно весь пакет пока состоит из одну функции:
secret.Do, которая принимает на вход функцию с сигнатурой func() и подчищает за ней следующие вещи на выходе из этой функции:• Весь стек который использовался во время работы горутины заполняется нулями. Если при работе стек «рос» (по факту — копировался в новое место) то прямо во время копии старый участок памяти рантайм заполнит нулями.
• Все регистры ЦПУ которые «могут содержать секреты» будут заполнены нулями после выхода. Подозреваю, что здесь речь идет о регистрах которые не используются самим рантаймом для служебных действий (верх, низ стека и прочая).
• Если в процессе работы переданной функции мы создаем объекты в хипе, то сразу после сборки мусора, их память будет заполнена нулями.
• Если внутри передаваемой функции произошла паника, подменяют стектрейс, что-бы скрыть любую информацию о переданной функции.
Для большинства это изменение ничего не меняет.
Но для тех кто работает с криптографией (включая TLS которое мы все используем в HTTPS, HTTP/2 и gRPC без флага insecure) это хорошая новость, которая позволяет усилить защиту приложений и усложнить чтение секретов злонамеренными акторами, даже если скомпрометирована вся железка. Плюс «надежную» очистку секретов часто требуют при сертификации софта в разных регионах нашей планеты.
П.С. Пакет пока доступен только для архитектур
amd64 и arm64 (если вы не поняли, что это значит, это хорошо тк вы точно попадаете в доступные архитектуры).П.П.С. Так-же пока пакет работает только под Linux.
GitHub
runwww.tgoop.com/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...
👍27👏7
Старожилы всхлипнули — Dave Cheney вернулся с новым квизом: https://dave.cheney.net/2025/11/27/pointer-pop-quiz
👍16🤔4
