type I interface { m()bool }
type T struct { x bool }
func (o T) m()bool { return o.x } // o:object
func (p *T) m()bool { return p.x } // p:pointer
both does not work. it is not possible to implement I for T and *T ( m already defined )
func fi(i I){}
func fp(i*I){}
fi(o) if T implements I
fi(p) if *T implements I
fp(p) or fp(&o) does not work at all, cause i dont know, how to implement *I
looks little strange to me.
if T implements I than, p*T references/pointsto something implementing I, and
func(i*I){}(p) and
func(i I){}(o) should work
?!
why not something like 'struct T implements I {}'
could be checked and user of T would know what T can do / where T can be used (what T is intended to be)
if there is a type T implementing about 20 methods
do i have to search all interfaces for what interface actual is implemented by this type ?
check for I asking for m1
check for I asking for m2
check for I asking for m1 and m2 .. (20 methods, lot of possibilities..)