GOLANG_BOOKS Telegram 1011
Forwarded from Golang
«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



tgoop.com/golang_books/1011
Create:
Last 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

BY Golang Books


Share with your friend now:
tgoop.com/golang_books/1011

View MORE
Open in Telegram


Telegram News

Date: |

Hashtags are a fast way to find the correct information on social media. To put your content out there, be sure to add hashtags to each post. We have two intelligent tips to give you: On Tuesday, some local media outlets included Sing Tao Daily cited sources as saying the Hong Kong government was considering restricting access to Telegram. Privacy Commissioner for Personal Data Ada Chung told to the Legislative Council on Monday that government officials, police and lawmakers remain the targets of “doxxing” despite a privacy law amendment last year that criminalised the malicious disclosure of personal information. A vandalised bank during the 2019 protest. File photo: May James/HKFP. So far, more than a dozen different members have contributed to the group, posting voice notes of themselves screaming, yelling, groaning, and wailing in various pitches and rhythms. Polls
from us


Telegram Golang Books
FROM American