Sobes.tech
Back to questions
Middle+
1

Что такое интерфейсы в Go? Что такое duck typing?

Companies where asked
X5

Answer from AI

sobes.tech AI

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

Duck typing — это концепция, согласно которой тип объекта определяется не его явным объявлением, а наличием определённых методов или свойств. В контексте 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 saySomething(s Speaker) {
    fmt.Println(s.Speak())
}

func main() {
    d := Dog{}
    c := Cat{}
    saySomething(d) // Woof!
    saySomething(c) // Meow!
}

Здесь Dog и Cat реализуют интерфейс Speaker, не объявляя это явно, но благодаря наличию метода Speak(). Это и есть пример duck typing в Go.