← ко всем постам
2026-08-09 · #basics

Интерфейсы в 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, содержит ровно один метод.