картина

Новое в Go 1.18


Обобщения, тестовый фаззинг, оптимизация AMD64, режим рабочей области и многое другое


Снова это время года: вот-вот выйдет новая версия Go. Команда Go только что выпустила Go 1.18 Release Candidate 1 (go1.18rc1) и планирует выпустить Go 1.18 к февралю 2022 года.


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

В дополнение к дженерикам Go 1.18 включает в себя множество других замечательных функций, таких как поддержка тестового фаззинга, поддержка микроархитектуры и оптимизация для процессоров AMD64, изменения в инструменте go, включая поддержку режима «рабочей области», поддержку основных библиотек. Несколько обновлений, а также столько же исправлений ошибок и небольших обновлений стандартной библиотеки.
Давайте взглянем на некоторые из основных обновлений.


Поддерживаются дженерики


Обобщения — самая ожидаемая функция в этом выпуске. Согласно предложению по дженерикам, Go 1.18 поддерживает начальные реализации универсальных типов и функций. С этим новым дополнением язык поддерживает объявление параметризованных типов и функций, которые впоследствии могут быть созданы с другими типами параметров.
Использование универсальных шаблонов увеличивает возможность повторного использования универсального кода, позволяя комбинировать наборы функций или типов, которые имеют схожие реализации, но работают с разными входными типами, в единую сущность, которую легче тестировать и поддерживать.
Например, некоторые библиотеки обычно имеют код, подобный следующему:

func SumInt(a, b int) int { 
return a + b
}func SumFloat32(a, b float32) float32 {
return a + b
}func SumFloat64(a, b float64) float64 {
return a + b
}//func sum. ..

Используя универсальные функции, вы можете объединить все эти функции в одну функцию:

func Sum[T ограничения.Ordered] (a, b T) T {
return a + b
}

Поскольку это критическое изменение языка и совершенно новая функция, существуют некоторые ограничения, которые могут повлиять на производительность, и могут возникнуть неизвестные проблемы. Помните об этих неопределенностях при развертывании универсального кода в рабочей среде.
Для получения дополнительной информации о дженериках ознакомьтесь с примечаниями к выпуску и обновленной спецификацией языка.


тестовый фаззинг


Еще одно долгожданное дополнение к Go 1.18 — поддержка тестового фаззинга. Фаззинг — это стратегия тестирования программного обеспечения, которая включает предоставление большого количества случайных входных параметров тестируемому коду, включая множество пограничных случаев, с целью обнаружения ошибок, их выявления, запуска исключений и выявления уязвимостей, которые трудно обнаружить людям. обнаружить.
Тестовый фаззинг Go добавляет новый тип к тестовому пакету testing.F и расширяет текущие функции и стратегии Go, такие как Table Driven Testing. До этого выпуска вы могли использовать внешние библиотеки для выполнения тестового фаззинга, но добавление фаззинга к стандартным инструментам обеспечит лучшую поддержку и более легкий доступ для большего числа разработчиков.
🌟 ОБРАТИТЕ ВНИМАНИЕ. Команда Go напоминает нам, что текущая реализация фаззинга использует много системных ресурсов и может повлиять на производительность системы во время выполнения.
См. документацию по Go Fuzzing для получения более подробной информации.


Оптимизация микроархитектуры для процессоров AMD64


В Go 1.18 представлены микроархитектурные оптимизации для процессоров AMD64. Теперь вы можете использовать новую переменную среды Go GOAMD64, чтобы выбрать одну из четырех целевых микроархитектур v1, v2, v3 или v4, чтобы указать компилятору оптимизировать сгенерированные двоичные файлы для конкретных возможностей ЦП. Это приводит к тому, что оптимизированные двоичные инструкции несовместимы с процессорами, не имеющими этих функций.
Значение по умолчанию переменной GOAMD64=v1 приводит к двоичным инструкциям, совместимым со всеми 64-разрядными процессорами x86.
Дополнительные сведения об этой функции см. в разделе «Архитектура» на странице «Минимальные требования».

Войти в режим рабочей области


Наконец, для последнего выделенного обновления Go 1.18 представляет новую поддержку режима рабочей области для команды go, которая позволяет вам работать с несколькими модулями одновременно. Раньше использование нескольких модулей было непросто и могло вызвать проблемы с инструментами и IDE. Эта новая функция решает эти проблемы, внося изменения в другие инструменты, такие как gopls, чтобы упростить работу с несколькими модулями.
С этим изменением, если команда или инструмент go находит файл с именем go.work в текущем или родительском каталоге, он будет работать в режиме с учетом рабочей области. Затем он использует содержимое этого файла, чтобы определить, какие модули использовать для разрешения зависимостей, а не файл go.mod.
В Go 1.18 вы можете использовать команду go work для создания файлов go.work и управления ими. См. его документацию для получения дополнительной информации.
Для более подробного объяснения функций рабочей области и краткого изложения многих других улучшений Go 1.18 ознакомьтесь с эпизодом 217 подкаста Go Time.


Что дальше?


В этой статье кратко описаны основные обновления Go 1.18, но есть много дополнительных исправлений ошибок и небольших улучшений инструментов, компилятора и стандартной библиотеки. Полный список см. в примечаниях к выпуску Go 1.18.
Если вы не можете ждать финального релиза через несколько недель и хотите начать тестирование Go 1.18 прямо сейчас, не устанавливая его на свой компьютер, посетите Go Playground и выберите Go Dev Branch в раскрывающемся списке Go Release. Вы также можете запустить его как контейнер, используя Podman или Docker.


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

эта статья https://jiagoushi.pro/whats-new-go-118
Пожалуйста, присоединяйтесь к Knowledge Planet [Super Engineer] или трубите [ceo_engr] или группе QQ [1019061742]
вводить QR код
публика

Официальный аккаунт [Super Engineer] рассказывает об архитектуре, методах, технологиях и опыте профессионального развития и разработки с низким кодом.

картина

труба WeChat Малый [ceo_engr]

картина

QQ группа

Группа QQ [11107767] Различные дискуссионные группы: Apex, Power, Mendix, Excel, CMS, дети. Полный стек, такой как Java, Python, Go, Rust, Groovy, SCala, KNode.JS, TypeScript, JavaScript, R, Ballerina (язык программирования для танцоров), различные фреймворки и инструменты.

картина

номер видео

Видео [ Суперпрограммист ] Быстро разберитесь с основными понятиями, моделями, методами и опытом, связанными с разработкой с низким кодом, за 1 минуту.

Не ограничивается Excel, Power Query, Power BI, Power Apps, Power Automate, Mendix, Apex, OpenXava, Apache Isis и т. д.

картина

номер видео

Видео [ Super Chief Engineer ] Быстро разберитесь с основными концепциями, моделями, методами и опытом, связанными с инженерами полного стека, за 1 минуту.

Не ограничиваясь Java, Python, Go, Rust, Groovy, SCala, KNode.JS, TypeScript, JavaScript, R, Ballerina (язык программирования для танцоров), различные фреймворки и инструменты.

картина

планета знаний Планета [Суперинженер] Задавайте важные вопросы о кофе, подходите ближе или делитесь личной информацией.

картина

Вейбо Weibo [главный инженер] супер инженер
маленькая красная книга Супер инженер супер инженер
быстрый работник супер инженер ]

картина

ТИК Так супер инженер ]

картина