Forwarded from Golang
🌀 Go 1.25 приносит мощный апгрейд JSON-библиотеки:
Что изменилось:
● Прямая работа с
Новые функции
● Потоковая обработка JSON
Появился модуль
● Гибкая настройка
Теперь функции
-
-
-
-
-
Пример:
● Новое поведение по умолчанию
Теперь:
JSON-парсинг чувствителен к регистру
Дублирующиеся ключи запрещены
Неизвестные поля игнорируются, если не указано иное
Можно включить прежнее поведение опциями (например, MatchCaseInsensitiveNames)
● Ускорение десериализации
Внутренний движок полностью переписан — ускорение десериализации в 2.7–10.2 раз. При использовании потоковых API (UnmarshalJSONFrom) — прирост до 40×.
● Экспериментальный статус
API ещё может меняться. По умолчанию encoding/json использует новый движок, но json/v2 доступен отдельно и требует флага:
Это — один из самых масштабных апдейтов стандартной библиотеки Go за последние годы. Подходит для тех, кто работает с тяжёлыми JSON-структурами, большими потоками или требует строгого контроля сериализации.
📌 Полный разбор и примеры
@golang_google
#golang #go #JSON
encoding/json/v2
— переработанная с нуля система сериализации с гибкой настройкой, высокой скоростью и новым APIЧто изменилось:
● Прямая работа с
io.Writer
и io.Reader
Новые функции
MarshalWrite
и UnmarshalRead
позволяют писать и читать JSON напрямую, без создания Encoder/Decoder. Это упрощает потоковую работу и уменьшает аллокации.● Потоковая обработка JSON
Появился модуль
jsontext
с функциями MarshalEncode
и UnmarshalDecode
, которые читают и пишут JSON по одному объекту за раз. Это критично для систем, обрабатывающих большие JSON-потоки, например, в Kubernetes.● Гибкая настройка
Теперь функции
Marshal
и Unmarshal
принимают опции, напрямую влияющие на формат вывода и поведение парсера:-
OmitZeroStructFields(true)
— пропускать нулевые поля -
StringifyNumbers(true)
— числа как строки -
MatchCaseInsensitiveNames(true)
— имена полей без учёта регистра -
FormatNilMapAsNull(true)
— nil`-карты как `null
-
WithIndent(" ")
— отступы в JSONПример:
json.Marshal(
user,
json.OmitZeroStructFields(true),
json.StringifyNumbers(true),
jsontext.WithIndent(" "),
)
● Новое поведение по умолчанию
Теперь:
JSON-парсинг чувствителен к регистру
Дублирующиеся ключи запрещены
Неизвестные поля игнорируются, если не указано иное
Можно включить прежнее поведение опциями (например, MatchCaseInsensitiveNames)
● Ускорение десериализации
Внутренний движок полностью переписан — ускорение десериализации в 2.7–10.2 раз. При использовании потоковых API (UnmarshalJSONFrom) — прирост до 40×.
● Экспериментальный статус
API ещё может меняться. По умолчанию encoding/json использует новый движок, но json/v2 доступен отдельно и требует флага:
GOEXPERIMENT=jsonv2
Это — один из самых масштабных апдейтов стандартной библиотеки Go за последние годы. Подходит для тех, кто работает с тяжёлыми JSON-структурами, большими потоками или требует строгого контроля сериализации.
📌 Полный разбор и примеры
@golang_google
#golang #go #JSON
Тимлид, вам слово📣 Приглашаем на митап по управлению командами
Воспользуйтесь летним затишьем, чтобы посмотреть на практику коллег, промониторить «погоду» в своей команде и, возможно, обновить стратегию работы. Обсудим дела тимлидские на офлайн-встрече TeamLead Talks в офисе Lamoda.
🤝 Обменяемся опытом, разберем кейсы командного управления и выберем лучшие решения.
🍕 Наладить непринужденное общение помогут нетворкинг-разогрев, игра «IT-бункер», закуски и напитки.
Присоединяйтесь к Team Lead Talks:
📅 2 июля в 19:00.
📍 Офлайн, Москва, офис Lamoda.
🔗Регистрируйтесь по ссылке, количество мест ограничено.
#реклама
О рекламодателе
Воспользуйтесь летним затишьем, чтобы посмотреть на практику коллег, промониторить «погоду» в своей команде и, возможно, обновить стратегию работы. Обсудим дела тимлидские на офлайн-встрече TeamLead Talks в офисе Lamoda.
🤝 Обменяемся опытом, разберем кейсы командного управления и выберем лучшие решения.
🍕 Наладить непринужденное общение помогут нетворкинг-разогрев, игра «IT-бункер», закуски и напитки.
Присоединяйтесь к Team Lead Talks:
📅 2 июля в 19:00.
📍 Офлайн, Москва, офис Lamoda.
🔗Регистрируйтесь по ссылке, количество мест ограничено.
#реклама
О рекламодателе
package main
func oneStep(yield func() bool) {
yield()
}
func f() {
for range oneStep {
print("f ")
recover()
}
}
func g() {
for range 1 {
print("g ")
recover()
}
}
func checkPanic(loop func(), c chan<- struct{}) {
defer func() {
println(recover() != nil)
c <- struct{}{}
}()
defer loop()
panic(123)
}
func main() {
c := make(chan struct{}, 1)
go checkPanic(f, c)
<-c
go checkPanic(g, c)
<-c
}
🔗 Ответ
@golang_interview
Please open Telegram to view this post
VIEW IN TELEGRAM
🔌 go-redis/cache — эффективное кэширование для Golang. Библиотека от создателей go-redis предлагает удобный способ организации двухуровневого кэша с Redis в качестве основного хранилища и локальным кэшем на основе TinyLFU.
Библиотека использует автоматическую сериализацию структур через MessagePack и поддержка распределённых Redis-конфигураций. Также интересно реализован механизм однократного вычисления значения для параллельных запросов через метод Once. Это упрощает работу с горячими ключами, когда несколько goroutines одновременно запрашивают одни и те же данные.
🤖 GitHub
@golang_interview
Библиотека использует автоматическую сериализацию структур через MessagePack и поддержка распределённых Redis-конфигураций. Также интересно реализован механизм однократного вычисления значения для параллельных запросов через метод Once. Это упрощает работу с горячими ключами, когда несколько goroutines одновременно запрашивают одни и те же данные.
🤖 GitHub
@golang_interview