tgoop.com/golang_digest/202
Create:
Last Update:
Last Update:
Вышел Go 1.24 (интерактивные примеры тут)
Производительность
Снижение нагрузки на CPU на 2-3% благодаря:
- Новой реализации встроенных map на основе Swiss Tables
- Более эффективному выделению памяти для малых объектов
- Новой внутренней реализации mutex в runtime
Обобщенные псевдонимы типов
Теперь можно создавать параметризованные псевдонимы типов, например:
type Set[T comparable] = map[T]bool
Слабые указатели
Добавлен новый пакет weak, который предоставляет weak pointers – указатели, которые не препятствуют сборке мусора. Это полезно для реализации кэшей и других структур данных, где нужно избежать утечек памяти.
Улучшенные финализаторы
Представлена новая функция runtime.AddCleanup, которая является более гибкой и эффективной альтернативой runtime.SetFinalizer. Она позволяет:
- Прикреплять несколько функций очистки к одному объекту
- Работать с внутренними указателями
- Избегать утечек памяти при циклических ссылках
Ограниченный доступ к файловой системе
Новый тип os.Root позволяет ограничить файловые операции определенной директорией, что полезно для безопасной работы с файлами.
// Пример использования os.Root
root, err := os.OpenRoot("/path/to/dir")
if err != nil {
log.Fatal(err)
}
// Операции ограничены директорией
f, err := root.Open("file.txt")
if err != nil {
log.Fatal(err)
}
Улучшения для тестирования
Добавлен метод testing.B.Loop, который предоставляет более простой и надежный способ написания бенчмарков:
func BenchmarkMyFunc(b *testing.B) {
// Вместо for i := 0; i < b.N; i++
for b.Loop() {
// код бенчмарка
}
}
Новый пакет testing/synctest позволяет тестировать код с временными операциями, используя синтетические часы вместо реального времени.
Криптография
Добавлены новые криптографические пакеты:
crypto/sha3 - реализация SHA-3
crypto/hkdf - реализация HKDF
crypto/pbkdf2 - реализация PBKDF2
Работа с JSON
Добавлена новая опция omitzero для тегов структур, которая позволяет пропускать нулевые значения при сериализации в JSON. В отличие от omitempty, она работает корректно с time.Time и другими типами, имеющими метод IsZero().
Инструментарий
Go модули теперь могут отслеживать зависимости от исполняемых файлов с помощью директив tool в go.mod. Команды go build, go install и go test получили флаг -json для вывода результатов в формате JSON.
@crossjoin
BY Golang Дайджест

Share with your friend now:
tgoop.com/golang_digest/202