← Назад

Duck-typing в Go

Duck-typing — это про «поведение важнее типа». В Go оно реализовано через интерфейсы и структурную типизацию, но работает не так, как в динамических языках.

Duck-typing опирается на принцип: «если что-то ходит как утка и крякает как утка — значит, это утка».

В терминах кода это означает: если объект реализует нужные методы/поведение, его можно использовать в месте, где ожидается «утка», независимо от его конкретного типа или иерархии наследования.

В Go нет классического наследования и явной привязки типа к интерфейсу через  implements , как в Java или C#. Go использует структурную типизацию интерфейсов: если тип имеет все методы интерфейса, он «реализует» этот интерфейс автоматически, без явного объявления.

Рассмотрим на примере ниже.

Есть интерфейс:

go
type Quacker interface {
    Quack()
}

Любой тип с методом Quack() автоматически удовлетворяет Quacker:

go
type Duck struct{}

func (Duck) Quack() { fmt.Println("quack") }

type Person struct{}

func (Person) Quack() { fmt.Println("I can quack like a duck") }

func MakeItQuack(q Quacker) {
    q.Quack()
}

Функции MakeItQuack всё равно, кто именно к ней придет — Duck, Person, *MyRobot, главное, чтобы у значения был метод Quack(). Это и есть «утиная» идея.

Похожие статьи

Интерфейсы в Go без боли

Краткое руководство по интерфейсам в Go.

07.04.2026 · 2 мин

Neetcode | Decode String

Решение алгоритмической задачки «Decode string» на Go.

16.04.2026 · 3 мин

Quick Sort: быстрая сортировка

Сортировка — одна из базовых задач в программировании. Упорядоченные данные легче искать, сравнивать и обрабатывать. За десятилетия придумали десятки алгоритмов сортировки. У каждого свои сильные и слабые стороны. Сегодня рассмотрим Quick Sort,

09.04.2026 · 3 мин

Каналы в Go

Канал (channel) — это типизированная очередь, через которую горутины могут безопасно передавать данные.

07.04.2026 · 2 мин

Комментарии

0

Ты: ...

Пока нет комментариев. Будь первым.