TG Telegram Group & Channel
Golang | United States America (US)
Create: Update:

«Go 1.25 interactive tour» — отличный обзор ключевых новинок, запланированных для Go 1.25 (релиз — август 2025)

Основные моменты:
1. Синтетическое время для тестов (synctest)
Новая библиотека testing/synctest позволяет использовать «фейковый» таймер для тестов, без реального ожидания:

🧪 Использование synctest.Test для "синтетического времени"

- synctest.Test(t, func(t *testing.T) {...}) запускает функцию в изолированном "пузыре", где:

- функции пакета time используют фиктивные часы;

- если все горутины заблокированы (например, time.Sleep, select без case), время продвигается вперед автоматически, чтобы "разблокировать" эти операции.

Пример теста:


func TestReadTimeout(t *testing.T) {
synctest.Test(t, func(t *testing.T) {
ch := make(chan int)
_, err := Read(ch)
if err == nil {
t.Fatal("expected timeout error, got nil")
}
})
}

Здесь мы проверяем, что Read действительно отдает ошибку "timeout", без реального ожидания 60 секунд — synctest просто симулирует, что они прошли.

🕰 Как это работает?
Внутри synctest.Test:

- Время начинается с 2000-01-01T00:00:00Z;

- Когда все горутины заблокированы, время продвигается до следующего события (time.After, time.Sleep и т.д.);

- Это позволяет сразу активировать нужные ветки кода, которые зависят от времени, без настоящих задержек.

⚠️ Ограничения
Внутри synctest.Test нельзя использовать:


t.Run(...)

t.Parallel()

t.Deadline()

Пример неверного использования:


synctest.Test(t, func(t *testing.T) {
t.Run("subtest", func(t *testing.T) {
t.Log("fail!") // это работать не будет
})
})


testing/synctest — это инструмент для тестирования кода, зависящего от времени, без реального ожидания, что делает тесты мгновенными и стабильными. Идеально подходит для timeout, retry, delays, ticker, и других случаев, когда вы хотите протестировать "прошло ли время", но не хотите реально ждать.

2. JSON v2 — серьезный апдейт
json/v2 вводит новые функции, включая MarshalToFunc, UnmarshalFromFunc и более гибкую систему маршаллинга с пользовательскими функциями.

Пример:



json.Marshal(vals, json.WithMarshalers(marshalers))


👉 Подробно можно почитать здесь


3. Container-aware GOMAXPROCS

Теперь Go учитывает ограничения CPU из cgroups – на Docker/Kubernetes GOMAXPROCS автоматически подстраивается под лимит, а не просто равен NumCPU


4. Новый сборщик мусора — Green Tea
Экспериментальный сборщик мусора оптимизирован для больших объёмов мелких объектов, обещают на 10–40 % снижение оверхеда. Включается через GOEXPERIMENT=greenteagc 


5. Защита от CSRF (http.CrossOriginProtection)

Добавлен новый тип для отсечения запросов из кросс-доменных источников, анализируя заголовки Sec-Fetch-Site и Origin 

6. sync.WaitGroup.Go
Упрощение работы c WaitGroup — теперь можно писать:


wg.Go(func() { /* … */ })
wg.Wait()

Вместо Add + Done 

7. Flight Recorder (trace.FlightRecorder)
Flight recording — это способ отслеживать, что происходит в программе: какие функции вызываются, сколько памяти используется и другие важные события.
Но главное — эта запись ведётся не всё время, а только в «скользящем окне»: сохраняются только последние N секунд или последние N мегабайт данных.
👉 Это полезно, когда вы не знаете заранее, когда случится ошибка — flight recorder позволит «поймать» последние события перед сбоем.

8. Расширенные методы os.Root
Добавлены методы Chmod, Chown, Chtimes, Link, MkdirAll, RemoveAll, Rename, Symlink, ReadFile, WriteFile 

9. reflect.TypeAssert
Упрощает преобразование reflect.Value в конкретный тип без промежуточного интерфейса.

10. hash.Cloner
Интерфейс клонирования состояния hash-функций (Clone()), поддерживается всеми реализациями STD (SHA-1, MD5 и др.)

📌 Полный обзор обновлений

@golang_google

«Go 1.25 interactive tour» — отличный обзор ключевых новинок, запланированных для Go 1.25 (релиз — август 2025)

Основные моменты:
1. Синтетическое время для тестов (synctest)
Новая библиотека testing/synctest позволяет использовать «фейковый» таймер для тестов, без реального ожидания:

🧪 Использование synctest.Test для "синтетического времени"

- synctest.Test(t, func(t *testing.T) {...}) запускает функцию в изолированном "пузыре", где:

- функции пакета time используют фиктивные часы;

- если все горутины заблокированы (например, time.Sleep, select без case), время продвигается вперед автоматически, чтобы "разблокировать" эти операции.

Пример теста:


func TestReadTimeout(t *testing.T) {
synctest.Test(t, func(t *testing.T) {
ch := make(chan int)
_, err := Read(ch)
if err == nil {
t.Fatal("expected timeout error, got nil")
}
})
}

Здесь мы проверяем, что Read действительно отдает ошибку "timeout", без реального ожидания 60 секунд — synctest просто симулирует, что они прошли.

🕰 Как это работает?
Внутри synctest.Test:

- Время начинается с 2000-01-01T00:00:00Z;

- Когда все горутины заблокированы, время продвигается до следующего события (time.After, time.Sleep и т.д.);

- Это позволяет сразу активировать нужные ветки кода, которые зависят от времени, без настоящих задержек.

⚠️ Ограничения
Внутри synctest.Test нельзя использовать:


t.Run(...)

t.Parallel()

t.Deadline()

Пример неверного использования:


synctest.Test(t, func(t *testing.T) {
t.Run("subtest", func(t *testing.T) {
t.Log("fail!") // это работать не будет
})
})


testing/synctest — это инструмент для тестирования кода, зависящего от времени, без реального ожидания, что делает тесты мгновенными и стабильными. Идеально подходит для timeout, retry, delays, ticker, и других случаев, когда вы хотите протестировать "прошло ли время", но не хотите реально ждать.

2. JSON v2 — серьезный апдейт
json/v2 вводит новые функции, включая MarshalToFunc, UnmarshalFromFunc и более гибкую систему маршаллинга с пользовательскими функциями.

Пример:



json.Marshal(vals, json.WithMarshalers(marshalers))


👉 Подробно можно почитать здесь


3. Container-aware GOMAXPROCS

Теперь Go учитывает ограничения CPU из cgroups – на Docker/Kubernetes GOMAXPROCS автоматически подстраивается под лимит, а не просто равен NumCPU


4. Новый сборщик мусора — Green Tea
Экспериментальный сборщик мусора оптимизирован для больших объёмов мелких объектов, обещают на 10–40 % снижение оверхеда. Включается через GOEXPERIMENT=greenteagc 


5. Защита от CSRF (http.CrossOriginProtection)

Добавлен новый тип для отсечения запросов из кросс-доменных источников, анализируя заголовки Sec-Fetch-Site и Origin 

6. sync.WaitGroup.Go
Упрощение работы c WaitGroup — теперь можно писать:


wg.Go(func() { /* … */ })
wg.Wait()

Вместо Add + Done 

7. Flight Recorder (trace.FlightRecorder)
Flight recording — это способ отслеживать, что происходит в программе: какие функции вызываются, сколько памяти используется и другие важные события.
Но главное — эта запись ведётся не всё время, а только в «скользящем окне»: сохраняются только последние N секунд или последние N мегабайт данных.
👉 Это полезно, когда вы не знаете заранее, когда случится ошибка — flight recorder позволит «поймать» последние события перед сбоем.

8. Расширенные методы os.Root
Добавлены методы Chmod, Chown, Chtimes, Link, MkdirAll, RemoveAll, Rename, Symlink, ReadFile, WriteFile 

9. reflect.TypeAssert
Упрощает преобразование reflect.Value в конкретный тип без промежуточного интерфейса.

10. hash.Cloner
Интерфейс клонирования состояния hash-функций (Clone()), поддерживается всеми реализациями STD (SHA-1, MD5 и др.)

📌 Полный обзор обновлений

@golang_google


>>Click here to continue<<

Golang




Share with your best friend
VIEW MORE

United States America Popular Telegram Group (US)