Что такое embedding в Go?

Middle
1.5k просмотров
AFK Offer AI

Embedding — это композиция типов. Вместо наследования Go использует встраивание: методы и поля внутреннего типа «поднимаются» на уровень внешнего.

type Logger struct{}
func (l Logger) Log(msg string) { fmt.Println(msg) }

type Server struct { Logger // embedded — без имени поля Port int }

s := Server{Port: 8080} s.Log("started") // вызываем метод Logger напрямую

Можно встраивать интерфейсы:

type ReadCloser interface {
    io.Reader   // embedded interface
    io.Closer
}

Это НЕ наследование:

  • Нет полиморфизма «снизу вверх» (Server != Logger)
  • При конфликте имён нужно указывать явно
  • Embedded тип не знает о внешнем (нет super/this)
Embedding — главный инструмент переиспользования кода в Go.

Следующий вопрос

Что такое микросервисы?