Je suis en train d'écrire un jeu en go. En C++, je stocke toutes mes classes d'entités dans un tableau de la classe BaseEntity. Si une entité devait se déplacer dans le monde, elle serait une PhysEntity, qui est dérivée d'une BaseEntity, mais avec des méthodes supplémentaires. J'ai essayé d'imiter cela dans 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())
}
Cela ne compilera pas car il ne pourra pas dire que 'entity' était une PhysEntity. Quelle est une alternative appropriée à cette méthode ?