Проверяет знание спецэффектов интерфейсных типов и их применения.
В Go различают непустые интерфейсы (с набором методов) и пустой интерфейс interface{} (никаких методов). Пустой интерфейс подходит для хранения любых значений, а непустой задаёт контракт. Также существуют составные интерфейсы, объединяющие несколько.
Пустой интерфейс (interface{}):
Может хранить любое значение.
Непустые интерфейсы:
Описывают конкретный контракт:
type Reader interface { Read(p []byte) (int, error) }Составные:
Объединение других интерфейсов:
type ReadWriteCloser interface {
Reader
Writer
Close()
}Интерфейс с одной функцией (functional):
Удобен для передачи поведения:
type Handler func(req Request) Response