Я пишу гру в go. У C ++ я б зберігав усі свої класи сутності в масиві класу BaseEntity. Якби сутності потрібно було рухатись у світі, це був би PhysEntity, який походить від BaseEntity, але з доданими методами. Я намагався імітувати це go:
package main
type Entity interface {
a() string
}
type PhysEntity interface {
Entity
b() string
}
type BaseEntity struct { }
func (e *BaseEntity) a() string { return "Hello " }
type BasePhysEntity struct { BaseEntity }
func (e *BasePhysEntity) b() string { return " World!" }
func main() {
physEnt := PhysEntity(new(BasePhysEntity))
entity := Entity(physEnt)
print(entity.a())
original := PhysEntity(entity)
// ERROR on line above: cannot convert physEnt (type PhysEntity) to type Entity:
println(original.b())
}
Це не буде скомпільовано, оскільки не може сказати, що "сутність" була PhysEntity. Яка підходяща альтернатива цьому методу?