Интерфейс — набор сигнатур методов. Реализация неявная: если тип имеет все методы интерфейса, он его реализует автоматически, без implements.
type Writer interface {
Write(p []byte) (n int, err error)
}
type MyWriter struct{}
func (w MyWriter) Write(p []byte) (int, error) {
return len(p), nil
}
Это позволяет писать слабо связанный код. Интерфейсы в Go принято делать маленькими (1-2 метода). Внутри интерфейсная переменная хранит пару (тип, значение).