Ограничение интерфейсом в 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
из примера урока и выведите строку.