28 Свои типы
Как тип начинает выполнять интерфейс?
Ответ
Интерфейс — это набор методов. Тип выполняет его сам, без объявления implements: достаточно иметь нужные методы. Чем меньше интерфейс, тем проще его выполнить. io.Reader — один метод Read.
Подробнее
Значение интерфейса хранит два поля: динамический тип и динамическое значение. Пустой интерфейс any принимает что угодно, потому что у него ноль методов.
Интерфейс описывают там, где его используют, а не рядом с конкретной структурой. Функция say(s Speaker) не знает про Dog и не должна знать.
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{})
}