dog.Hello()
возвращает *Animal
, а не *Dog
, поэтому вы не можете просто вызвать .Bark()
для возвращенного значения.
Обратите внимание, что вызов dog.Hello()
на самом деле не вызывает Hello()
в структуре Dog
, а скорее в *Animal
, содержащемся внутри. Это просто синтаксический сахар, эквивалентный dog.animal.Hello()
(если поле *Animal
было названо, а не анонимно). Это не наследство!
Однако у вас уже есть *Dog
, так что вы можете просто позвонить .Bark()
по этому вопросу напрямую:
dog.Hello()
dog.Bark()
Предложения в комментариях по поводу интерфейсов также могут быть полезны, но в этом игрушечном примере сложно сказать, чего вы пытаетесь достичь.