Please see the code below. I know it as a fact that a non pointer receiver can accept pointer and non-pointers values but a pointer receiver can only accept a pointer value. That being said, I fail to understand how the last call works and the second-last doesn't. (Run Here)
The issue is that I am able to call a Pointer Receiver method from non pointer method. That is not explained in the other similar question. That answer explains only about the pointer calling pointer receiver method.
package main
import (
    "fmt"
)
type person struct {
    name string
}
type human interface {
    speak() string
}
func (p *person) speak() string {
    return "Speak() called by " + p.name
}
func saySomething(h human) {
    fmt.Println("area", h.speak())
}
func main() {
    p := person{"harsh"}
    //works
    saySomething(&p)
    //doesn't work
    //saySomething(p)
    //works
    p.speak()
}
 
    