Sobes.tech
Back to questions
Senior
2

Как устроен интерфейс в Go?

Companies where asked
Магнит Тех

Answer from AI

sobes.tech AI

В Go интерфейс — это набор методов, которые должен реализовать тип, чтобы считаться этим интерфейсом. Интерфейсы в Go являются неявными: тип автоматически реализует интерфейс, если у него есть все методы интерфейса.

Интерфейс задаёт поведение, а не структуру данных. Это позволяет писать гибкий и расширяемый код.

Пример интерфейса и его реализации:

package main
import "fmt"

// Определяем интерфейс
type Speaker interface {
    Speak() string
}

// Тип, реализующий интерфейс
type Dog struct {}
func (d Dog) Speak() string {
    return "Woof!"
}

// Другой тип
type Cat struct {}
func (c Cat) Speak() string {
    return "Meow!"
}

func main() {
    var s Speaker

    s = Dog{}
    fmt.Println(s.Speak()) // Woof!

    s = Cat{}
    fmt.Println(s.Speak()) // Meow!
}

Ключевые особенности интерфейсов в Go:

  • Неявная реализация — не нужно явно указывать, что тип реализует интерфейс.
  • Интерфейсы могут быть вложенными.
  • Интерфейсы позволяют писать код, работающий с разными типами через общий контракт.
  • Пустой интерфейс interface{} может содержать значения любого типа.

Таким образом, интерфейсы в Go — мощный инструмент для абстракции и полиморфизма.