Найти тему
Golang с 0

Golang вошел в топ-10 на Tiobe!

Оглавление

Произошло знаменательное событие. В феврале 2024 года Go вошел в десятку популярных языков программирования рейтинга Tiobe. Это первый случай в истории языка, когда он занимает столь высокую позицию. А именно восьмую строчку.

Ссылка на рейтинг

TIOBE Index - TIOBE

В сообществе есть разные мнения по поводу объективности этого рейтинга. Все же он отражает некоторую степень востребованности языка на рынке.

Go 1.22 is released! - The Go Programming Language

Чтобы отметить такое событие, предлагаю в этой короткой статье посмотреть на интересные изменения, которые были добавлены в версии 1.22.

Версия 1.22

С новыми функциями вы уже можете ознакомиться, установив последнюю версию Go или в онлайн — песочнице.

Go Playground - The Go Programming Language

Начнем с самого простого и изящного.

Итерация по числовому ряду

Добавлен новый вариант цикла for range, в котором можно указать число. В переменную цикла, будут сохраняться значения, начиная с 0 и до указанного числа не включительно.

Выводим числа от 0 до 5 включительно.
Выводим числа от 0 до 5 включительно.

Если значение будет отрицательное, то цикл не запустится вообще.

Цикл не прошел ни одной итерации
Цикл не прошел ни одной итерации

Для сравнения приведем два варианта — старый и новый.

-4

Получаем идентичный результат, но с экономией набора символов.

Улучшение цикла for

Второе значимое улучшение связано с проблемой цикла for.

До версии 1.22 на каждой итерации цикла, переменная цикла инициализировалась только один раз. Если распечатать адрес этой переменной, то он будет неизменным в блоке видимости конструкции цикла.

Это было сделано для экономии вычислений и выделения памяти.

Давайте посмотрим на примере:

Адрес переменной одинаков в каждой итерации цикла
Адрес переменной одинаков в каждой итерации цикла

Обратите внимание, что адрес переменной в цикле один и тот же.

Адрес переменной разный в каждой итерации
Адрес переменной разный в каждой итерации

В версии 1.22 адрес переменной в цикле меняется.

Это важное изменение избавляет от части проблем, связанных с замыканиями и горутинами.

В предыдущих версиях Go следующий код работал не совсем так, как может ожидать разработчик.

-7

Видим что, функции fmt.Print(i) выводит одно и то же значение. Если не учитывать это, такое поведение приводит к серьезным ошибкам в логике программы. Линтер go vet предупреждает, что переменная цикла захватывается функцией, что может приводить к тяжелым последствиям при эксплуатации многопоточных программ.

В новой версии ситуация кардинально меняется.

-8

Теперь такой код корректно выдает все числа от 0 до 9, а не только последнее значение переменной i.

Функция Concat для срезов

Теперь срезы можно складывать с помощью функции Concat. Она добавлена в пакет slices.

-9

В примере мы складываем два среза [1, 2] и [3, 4] и ожидаемо получаем один срез из четырех элементов: [1, 2, 3, 4]

Оптимизация производительности

С каждой новой версией Go разработчики языка трудятся над улучшением производительности.

В новой версии среда выполнения (runtime) была улучшена на 1-3 процента в части управления памятью, также снизив расход памяти примерно на 1%.

Почетное упоминание

Достойны упоминания следующие нововведения:

1) Добавлен пакет math/rand/v2

В нем значительно переработан API пакета для генерации псевдослучайных последовательностей.

2) http.ServeMux теперь поддерживает wildcards и помогает создавать параметризованные функции обработки в веб-приложениях.

Эти новшества мы рассмотрим в дальнейших материалах.

Оффтоп

Если только начинаешь изучать язык Go, почитай серию уроков по основам:

Уроки по Go | Golang с 0 | Дзен

Также у меня есть платный курс на платформе Stepik, который способен закрыть все потребности для подготовки к собеседованию по Go. Он подходит и для начинающих разработчиков.

Go (Golang) практика

Продуктивности и добра.

До встречи друзья!