Обобщенная функция в Go
Обобщенную функцию отличают квадратные
скобки сразу после имени. Внутри скобок
пишут имя параметра типа, затем ограничение
после пробела. Так компилятор знает, что
T в сигнатуре и теле подставится
конкретным типом при сборке.
Ограничение any не отсекает типы:
функция может принять число, строку или
структуру, если остальная сигнатура это
допускает. Параметры и результат по-прежнему
обычные имена, только часть из них может
зависеть от T.
Сделаем функцию, которая печатает переданное
значение без привязки к одному типу. На
экране сначала 10, затем строка
"hi":
package main
import "fmt"
func Show[T any](v T) {
fmt.Println(v)
}
func main() {
Show(10)
Show("hi")
}
Объявите обобщенную функцию Twice
с одним параметром типа и ограничением
широкого типа, которая возвращает
удвоенное значение для целого 3,
и выведите результат.
Дан следующий код:
func Pair[T any](a, b T) (T, T) {
return a, b
}
Скажите, сколько параметров типа у этой функции.
Дан следующий код:
func Bad[T int](v T) {
}
Скажите, можно ли в квадратных скобках
сразу после имени указать только int
без интерфейса с перечнем.