G
Go & IT
@it_golang1.3K подп.
2.5Kпросмотров
1 августа 2025 г.
statsScore: 2.7K
Продолжаем разбираться с go1.25 который должен выйти уже в этом месяце. В предыдущих версиях encoding/json struct-теги были довольно ограниченными, но в новом пакете encoding/json/v2 появилась мощная опция format, которая позволяет задавать специальное форматирование для разных типов: дат, чисел, байтовых массивов и тд. Пример: package main import ( "encoding/json/v2" // импортируем новый пакет "math" "time" ) type Data struct { // time.Duration в формате "1h0m0s" (строка) Duration time.Duration json:"duration,format:units" // time.Duration в секундах (числом) DurationSec time.Duration json:"duration_sec,format:sec" // time.Time в формате "YYYY-MM-DD" Date time.Time json:"date,format:'2006-01-02'" // []byte как base64url B64 []byte json:"b64,format:base64url" // float64 с поддержкой NaN и ±Inf в виде строки Val float64 json:"val,format:nonfinite" // nil slice выводится как null (а не []) List []int json:"list,format:emitnull" } func main() { data := Data{ Duration: time.Hour, DurationSec: time.Hour, Date: time.Now(), B64: []byte("base64url"), Val: math.NaN(), } dataJson, err := json.Marshal(data) // ... } Получившийся json: { "duration": "1h0m0s", "duration_sec": 3600, "date": "2025-08-01", "b64": "YmFzZTY0dXJs", "val": "NaN", "list": null } Раньше приходилось вручную реализовывать MarshalJSON или писать вспомогательные поля, теперь же стало чуточку удобнее 🙌
2.5K
просмотров
1507
символов
Да
эмодзи
Нет
медиа

Другие посты @it_golang

Все посты канала →
Продолжаем разбираться с go1.25 который должен выйти уже в э — @it_golang | PostSniper