Следите за новинками
в нашем Telegram канале. Жми, чтобы подписаться:)
⊗goSpGnIf 87 of 280 menu
◀ ▶

Вывод типа в Go

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

Явная запись типа в угловых скобках тоже допустима: она нужна, когда аргументов нет или тип из контекста не виден. Оба способа дают один и тот же проверенный код после сборки.

Проверим вывод на функции с одним параметром:

package main import "fmt" func First[T any](items []T) T { return items[0] } func main() { nums := []int{4, 5, 6} fmt.Println(First(nums)) words := []string{"a", "b"} fmt.Println(First(words)) }

Для среза целых параметр типа становится int, для строкового среза string. Скобки с типом в тексте программы не понадобились.

Тот же тип можно указать явно перед скобками с аргументами:

package main import "fmt" func First[T any](items []T) T { return items[0] } func main() { nums := []int{1, 2} fmt.Println(First[int](nums)) }

Дан следующий срез:

flags := []bool{true, false}

Передайте flags в обобщенную First без угловых скобок с типом и выведите первый элемент.

Дан следующий код:

func Zero[T any]() T { var z T return z }

Скажите, нужно ли здесь явно писать тип в угловых скобках при обращении к функции.

Объявите обобщенную Last для среза с тем же параметром типа, что у First, создайте срез дробных 1.5 и 2.5, выведите последний элемент с явным float64 в угловых скобках.

← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить