Assuming we have an understanding that,
For explicit method definition for type
X, GO compiler implicitly defines the same method for type*Xand vice versa, if I declare,func (c Cat) foo(){ //do stuff_ }and declare,
func (c *Cat) foo(){ // do stuff_ }then GO compiler gives error,
Compile error: method re-declaredwhich indicates that, pointer method is implicitly defined and vice versa
In the below code,
package main
type X interface{
  foo();
  bar();
}
type Cat struct{
}
func (c Cat) foo(){
  // do stuff_
}
func (c *Cat) bar(){
  // do stuff_
}
func main() {
  var c Cat
  var p *Cat
  var x X
  x = p // OK; *Cat has explicit method bar() and implicit method foo()
  x = c //compile error: Cat has explicit method foo() and implicit method bar()
}
GO compiler gives error,
cannot use c (type Cat) as type X in assignment:
    Cat does not implement X (bar method has pointer receiver)
at x = c, because, implicit pointer methods satisfy interfaces, but implicit non-pointer methods do not.
Question:
Why implicit non-pointer methods do not satisfy interfaces?
 
     
     
     
     
    