Все вопросы

28 Свои типы

Как тип начинает выполнять интерфейс?

Интерфейс — это набор методов. Тип выполняет его сам, без объявления implements: достаточно иметь нужные методы. Чем меньше интерфейс, тем проще его выполнить. io.Reader — один метод Read.

Значение интерфейса хранит два поля: динамический тип и динамическое значение. Пустой интерфейс any принимает что угодно, потому что у него ноль методов.

Интерфейс описывают там, где его используют, а не рядом с конкретной структурой. Функция say(s Speaker) не знает про Dog и не должна знать.

Пример

Go

Dog выполняет Speaker без явной пометки

package main

import "fmt"

type Speaker interface {
    Speak() string
}

type Dog struct{}

func (Dog) Speak() string { return "гав" }

func say(s Speaker) {
    fmt.Println(s.Speak())
}

func main() {
    say(Dog{})
}