39K subscribers
1.63K photos
45 videos
5 files
1.77K links
admin - @haarrp

https://t.me/Golang_google - Golang разработка

https://t.me/golangl - golang чат

https://t.me/golangtests go тесты

https://t.me/ai_machinelearning_big_data машинное обучение

@itchannels_telegram

РКН: clck.ru/3Fmx3s
Download Telegram
👊🏻👋🏻 Generic Web Handlers

В блоге Pragmatic Paths вышла статья о Generic Web Handlers (GWU) в Go. В ней рассказывается о создании универсальных обработчиков веб-запросов, которые абстрагируют повторяющийся код для обработки HTTP-запросов и ответов.

Примеры включают создание и обработку JSON данных, использование функций для выполнения бизнес-логики и логирования.

Автор делится собственными идеями и примерами кода, которые делают разработку более эффективной и структурированной.


📌Прочитать полный док

#golang #json #go

@Golang_google
👍126🥰2🤬2
👩‍💻 Go-jsonstruct

Инструмент Go, который генерирует структуры Go из нескольких объектов JSON или YAML.


go install github.com/twpayne/go-jsonstruct/v3/cmd/gojsonstruct@latest



{
"age": 37,
"user_height_m": 2
}

{
"age": 38,
"user_height_m": 1.7,
"favoriteFoods": [
"cake"
]
}




package main

type T struct {
Age int `json:"age"`
FavoriteFoods []string `json:"favoriteFoods,omitempty"`
UserHeightM float64 `json:"user_height_m"`
}

#golang #json #yaml

Github

@golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
👍316🔥5😁2🤬1
🌀 Go 1.25 приносит мощный апгрейд 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
🔥139👍2418
Новый экспериментальный JSON API в Go

В версии Go 1.25 появился новый способ работы с JSON — пакеты encoding/json/v2 и encoding/json/jsontext.
Пока они работают только в экспериментальном режиме: чтобы включить, нужно указать GOEXPERIMENT=jsonv2 или собрать проект с тегом goexperiment.jsonv2.

Зачем это нужно?

Старая библиотека encoding/json существует с первых версий Go и за годы накопила массу проблем:

- Принимает некорректный UTF-8 и дубли ключей в объектах — это нарушает стандарт и может вести к багам.
- nil`-срезы и карты сериализуются как `null, хотя логичнее было бы [] или {}.
- Сопоставление полей Go-структур нечувствительно к регистру — медленно и запутанно.
- Нет нормального стриминга JSON.
- Есть лишние аллокации и даже квадратичные замедления при рекурсии.

Что изменилось в v2?

- Код разделён на два уровня: синтаксис (`jsontext`) и работа со значениями (`json/v2`). Это упростило и ускорило библиотеку.
- Marshal работает так же быстро, как в старой версии, а Unmarshal стал значительно быстрее.
- Поведение можно тонко настраивать через новые опции.
- Ошибки прошлого (дубли ключей, странное поведение с nil, нечувствительность к регистру) исправлены.

📌 Как запустить?


go run -tags goexperiment.jsonv2 .


или


GOEXPERIMENT=jsonv2 go run .


Новый API делает работу с JSON быстрее, чище и предсказуемее. Пока он экспериментальный, но, если сообщество даст положительный отклик, то в Go 1.26 или следующей версии json/v2 станет стандартом.

Почитай официальный блог: https://go.dev/blog/jsonv2-exp

@Golang_google

#Go #Golang #JSON #Go125 #encodingjson #jsonv2
👍2812🔥7