Что выведет код 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 ошибок.
Предыдущий вопрос
Сортировка структур по нескольким ключам на Go
Следующий вопрос
Что выведет Go: интерфейс хранит копию значения
Ещё по теме «Структуры, методы и интерфейсы»
- LRU-кеш на Go: map и двусвязный список
- Очередь с приоритетом через container/heap на Go
- Площади фигур через интерфейс Shape на Go
- Что выведет Go: method value и defer копируют ресивер
- Что выведет Go: nil-указатель в интерфейсе error
- Что выведет Go: ресиверы по значению и указателю
- Что выведет Go: сравнение структур и указателей
- Что выведет Go: type switch