Ich schreibe ein Spiel in go. In C ++ würde ich alle meine Entitätsklassen in einem Array der BaseEntity-Klasse speichern. Wenn sich eine Entität in der Welt bewegen müsste, wäre dies eine PhysEntity, die von einer BaseEntity abgeleitet ist, jedoch zusätzliche Methoden enthält. Ich habe versucht, dies nachzuahmen.
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())
}
Dies wird nicht kompiliert, da es nicht sagen kann, dass 'Entität' eine PhysEntity war. Was ist eine geeignete Alternative zu dieser Methode?