title: How to invoke a method with pointer receiver after type assertion?
body: <p>I am learning interface, type conversions and methods with pointer receivers.
  The rules and terminology behind pointer receiver methods are confusing to me.
  Let me demonstrate my confusion with one program.</p>
  
  <p>This is my Go program.</p>
  
  <pre><code>package main
  
  import "fmt"
  
  type Employee struct {
      Name string
  }
  
  func (e Employee) Hi() {
      fmt.Printf("Hi! I am %s.\n", e.Name)
  }
  
  func (e *Employee) Hello() {
      fmt.Printf("Hello! I am %s.\n", e.Name)
  }
  
  func main() {
      var a Employee = Employee{"Alice"}
      a.Hi()
      a.Hello()
  
      var b interface{} = Employee{"Bob"}
      b.(Employee).Hi()
      // b.(Employee).Hello()
  }
  </code></pre>
  
  <p>This is the output.</p>
  
  <pre><code>Hi! I am Alice.
  Hello! I am Alice.
  Hi! I am Bob.
  </code></pre>
  
  <p>If I remove the last commented out line, I get this error.</p>
  
  <pre><code># command-line-arguments
  ./foo.go:24: cannot call pointer method on b.(Employee)
  ./foo.go:24: cannot take the address of b.(Employee)
  </code></pre>
  
  <p>How can I fix that line of code so that I am able to invoke the method with
  pointer receiver? Please explain a solution with some clarification on why this
  does not work by laying down the concepts of methods with pointer receiver.</p>