Что такое интерфейсы в Go? Что такое duck typing?
Ответ от нейросети
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.