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

Ограничение интерфейсом в Go

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

Интерфейс для ограничения объявляют как обычно: список методов без привязки к конкретной структуре. Любой тип с нужным набором методов подходит под параметр типа, даже если вы о нем не писали явно в ограничении.

Ограничим тип методом текста и напечатаем его строковое представление. На экране слово "go":

package main import "fmt" type Stringer interface { String() string } func PrintString[T Stringer](v T) { fmt.Println(v.String()) } type Label struct { Text string } func (l Label) String() string { return l.Text } func main() { PrintString(Label{Text: "go"}) }

Объявите интерфейс с методом Len, обобщенную функцию, которая печатает результат Len, реализуйте метод для структуры с полем-срезом и выведите длину для среза из двух элементов.

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

type Stringer interface { String() string } func Show[T Stringer](v T) { fmt.Println(v.String()) }

Скажите, какой метод обязан иметь тип T, чтобы его приняла Show.

Дана структура:

type Code struct { Num int }

Добавьте метод String, который возвращает десятичный текст числа, передайте значение в PrintString из примера урока и выведите строку.

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