Как на самом деле методы в Go отправляются, если мы используем интерфейс, stati c (время компиляции) или динамический c (время выполнения). Давайте рассмотрим этот код:
package main
import "fmt"
type ICat interface {
Meow()
Walk()
Run()
}
func NewCat(name string) ICat {
return &cat{
name:name,
}
}
type cat struct {
name string
}
func (c *cat) Meow() {
fmt.Print("Meowwwwwwwww")
}
func (c *cat) Walk() {
fmt.Print("Walk")
}
func (c *cat) Run() {
fmt.Print("Run")
}
type IAnimal interface{
DoSound()
}
type animal struct {
cat ICat
}
func New() IAnimal {
return &animal{
cat:NewCat("bobby"),
}
}
func (a *animal) DoSound() {
a.cat.Meow()
}
func main() {
i := New()
i.DoSound()
}
Go Детская площадка: https://play.golang.org/p/RzipDT6FAC9
Как на самом деле эти методы, определенные в этих интерфейсах, были отправлены? Я использую этот стиль разработки для реализации разделения интерфейса и разделения внимания между данными и поведением. Мое другое беспокойство - перф. Некоторые сказали, что он статически отправляется во время компиляции, в то время как другие говорили, что он динамически отправляется во время выполнения.