Что выведет код Middle Структуры, методы и интерфейсы спрашивают часто обновлено

Что выведет Go: встраивание и вызов метода

Вопрос

Что выведет программа? Go 1.23, в go.mod указано go 1.23. Каждую строку вывода пишите с новой строки.

package main

import "fmt"

type Animal struct{ Name string }

func (a Animal) Sound() string { return "..." }
func (a Animal) Speak() string { return a.Name + ": " + a.Sound() }

type Dog struct{ Animal }

func (d Dog) Sound() string { return "гав" }

func main() {
    d := Dog{Animal{"Рекс"}}
    fmt.Println(d.Sound())
    fmt.Println(d.Speak())
}

Попробуйте сами

Напишите, что выведет код: каждый вывод с новой строки.

Показать ответ и разбор

Коротко

Код выведет: гав, Рекс: ... d.Sound() находит метод Dog на самом верхнем уровне. d.Speak() поднят из Animal, и внутри него ресивер это Animal, поэтому a.Sound() вызывает метод Animal.

Что выведет

гав
Рекс: ...

Разбор

d.Sound() находит метод Dog на самом верхнем уровне. d.Speak() поднят из Animal, и внутри него ресивер это Animal, поэтому a.Sound() вызывает метод Animal. Встраивание не даёт виртуальных методов.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.