RSS Telegram YouTube Apple Яндекс Spotify Google Amazon Почта

42. Go 1.22.1, PostgreSQL в облаке, пакет slices

10.03.2024

Скачать

К списку выпусков

Ссылки выпуска:

Улучшения в пакете slices

В Go 1.21, т.е. предыдущей стабильной версии, вызов slices.Delete[S ~[]E, E any](s S, i, j int) S не обнулял значения удаленных элементов и они могли остаться в памяти. Если количество удаленных элементов велико, а тем более, если это, например, указатели на большие объекты, то это могло привести к утечкам памяти. В Go 1.21 дженерик-удаление - это однострочная функция.

Подлежащий массив слайса s до удаления в Go 1.21:

0 1 2 3 4

Ниже подлежащий массив слайса после удаления в Go 1.21 slices.Delete(s, 1, 4). Серым обозначены удаленные элементы слайса:

0 4 2 3 4

У команды разработчиков Go было и другое решение - предоставить пользователю самому обнулять ненужные элементы. Но это бы привело, по их мнению, к тому, что нужно постоянно помнить о том, что удаление способно привести к утечкам памяти. В итоге команда решила, что пусть уж лучше Go бережливо относится к памяти.

В Go 1.22 удаленные элементы в хвосте слайса обнуляются. То же самое касается функций пакета slices: Compact(), CompactFunc() и DeleteFunc().

Сравнение PostgreSQL в облаках: AWS, Azure, GCP и Supabase.

По ссылке вы можете глянуть на сравнение производительности и стоимости развертывания PostgreSQL в облаках. Автор арендовал на время теста машины с 2vCPU, 8GB RAM и 100GB SSD и запустил pgbench на сутки. По итогу самым производительным оказался AWS, но одновременно и самым дорогим (USD141), а самым доступным Supabase (USD113; низкая цена судя по всему обеспечена ARM процессорами).

Немного про ARM процессоры: они более энергоэффективны, допускают высокую плотность размещения ядер без перегрева, а также ARM Holdings поощряет конкуренцию: любой желающий может по лицензии создавать свои процессоры на базе архитектуры ARM.

Go 1.22.1

Версия go1.22.1 (выпущена 2024-03-05) включает в себя исправления безопасности для пакетов crypto/x509, html/template, net/http, net/http/cookiejar и net/mail, а также исправления ошибок для компилятора, команды go, среды выполнения, команды trace и пакетов go/types и net/http.