В блоге 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, но думаю, что это действительно что-то важное для комьюнити — то, чего ждали уже долгое время».

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

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