title: Casting back to more specialised interface
body: <p>I'm writing a game in go. In C++ I would store all my entity classes in an array of the BaseEntity class. If an entity needed to move about in the world it would be a PhysEntity which is derived from a BaseEntity, but with added methods. I tried to imitate this is go:</p>
  
  <pre><code>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())
  }
  </code></pre>
  
  <p>This will not compile as it cant tell that 'entity' was a PhysEntity. What is a suitable alternative to this method?</p>