Интерфейсы в Go: утиная типизация без магии
В Go не нужно писать implements. Если у типа есть все методы интерфейса — он этот интерфейс реализует. Компилятор проверит соответствие в момент использования.
type Stringer interface {
String() string
}
type User struct{ Name string }
func (u User) String() string {
return "user: " + u.Name
}Теперь User — это Stringer, хотя мы нигде об этом не заявляли явно.
Держите интерфейсы маленькими
Идиома Go: интерфейс объявляет тот, кто его использует, а не тот, кто реализует. И чем меньше методов — тем лучше. Самый известный интерфейс стандартной библиотеки, io.Reader, содержит ровно один метод.