Код
#новости

Вышел Golang 1.18 Beta 1 — с дженериками

Добавили дженерики, рабочий режим, fuzzing-тестирование и многое другое.

В блоге Golang 14 декабря 2021 года появилась новость о выходе версии Golang 1.18 Beta 1. Разработчики языка дали возможность программистам протестировать нововведения до основного релиза, который состоится в начале 2022-го.

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

func PrintAnything[T any](thing T) {
  fmt.Println(thing)
}

PrintAnything("Hello!")
PrintAnything(42)

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

type Stringer interface {
    String() string
}

func Join[T Stringer](things []T) (result string) {
    for _, v := range things {
        result += v.String()
    }
    return result
}

result := Join([]int{1, 2, 3})
// выдаст ошибку

Добавили поддержку рабочего режима. Она позволяет разработчикам проще следить за несколькими модулями одновременно. Если раньше нужно было перед коммитом удалять лишние строки в файле go.mod, то теперь можно указать вспомогательные модули в go.work.

Появилась встроенная поддержка fuzzing-тестирования. Оно помогает автоматически тестировать приложения, передавая на вход неожиданные или случайные данные. Подробности можно прочитать в официальном блоге Golang.

Полный список изменений можно посмотреть в пресс-релизе от Google. А дженерики можно безопасно потестить в песочнице.

Вот что об этом думают пользователи Reddit:

«А где летающие свиньи, которые были обещаны? Рад, что эта функция наконец-то вышла в бету. Я не очень знаком с Go, но думаю, что это действительно что-то важное для комьюнити — то, чего ждали уже долгое время».

Скриншот: Reddit

«Я из тех, кто считает, что ЯП не достиг просветления, пока он не уберёт возврат значений полностью. Лучше присваивать значение глобальной переменной и использовать goto, чтобы вернуться назад к вызывающей функции или наверх по коду».

Скриншот: Reddit

PhaseSea1141: «Отлично, теперь дайте нам суммирование типов».


Iuse_arch_btw: «10 лет спустя…»

Скриншот: Reddit

Онлайн-школа для детей Skillbox Kids
Учим детей программированию, созданию игр, сайтов и дизайну. Первое занятие бесплатно! Подробности — по клику.
Узнать больше
Понравилась статья?
Да

Пользуясь нашим сайтом, вы соглашаетесь с тем, что мы используем cookies 🍪

Ссылка скопирована