🔥 Вышел Go 1.27: что нового Поменялся сам язык, а под encoding/json подменили движок. Коротко о том, что пригодится на практике. 🔹 Дженерик-методы Метод теперь может объявлять свои параметры типа. Раньше такое приходилось выносить в функцию уровня пакета. type List[E any] []E func (l List[E]) Map[R any](f func(E) R) List[R] { r := make(List[R], len(l)) for i, v := range l { r[i] = f(v) } return r } names := List[User]{u1, u2}.Map(func(u User) string { return u.Name }) Оговорка: в интерфейсах так нельзя. Дженерик-метод не реализует метод интерфейса, спрятать такой Map за интерфейсом не выйдет. 🔹 Поля встроенных структур в литералах Поле встроенной структуры теперь можно задать напрямую. type Base struct{ ID int } type User struct { Base Name string } u := User{ID: 7, Name: "gopher"} // раньше: User{Base: Base{ID: 7}, Name: "gopher"} Мелочь, но фикстуры и тестовые данные становятся чище. 🔹 JSON стал быстрее encoding/json переписали на движок v2. Поведение то же, разбор заметно быстрее — достаточно пересобрать проект. Текст ошибок мог поменяться, так что тесты со сравнением строк ошибок стоит проверить. Рядом лежит encoding/json/v2 со строгими правилами: невалидный UTF-8 и дубли ключей теперь ошибка. 🔹 uuid в стандартной библиотеке id := uuid.NewV7() // время + случайные биты, сортируемый s := id.String() back, err := uuid.Parse(s) Есть NewV4, Nil, Max, MustParse, Compare и Marshal/UnmarshalText. Внешнюю зависимость на uuid можно выкидывать. 🔹 Runtime Мелкие аллокации (до 80 байт) подешевели до 30%. Профиль утечек горутин доехал из эксперимента до релиза: /debug/pprof/goroutineleak. Показывает горутины, которые ждут на канале или мьютексе, а разблокировать их уже некому. net/http дочитывает непрочитанное тело ответа при Close(), соединения лучше переиспользуются. 🔗 Release notes: https://go.dev/doc/go1.27