On Saturday, December 10, 2016 at 7:08:01 PM UTC+8, Konstantin Khomoutov 
wrote:
>
> On Sat, 10 Dec 2016 02:37:24 -0800 (PST) 
> T L <tapi...@gmail.com <javascript:>> wrote: 
>
> [...] 
> > But the spec says a method M defined for type T is also a method of 
> > *T. In fact, it is not accurate. T.M and (*T).M have different 
> > signatures. 
>
> The spec does not say that. 
> What you state is your interpretation of the spec. 
>
> I think the confusion stems from the difference between what you think 
> method sets are there for and what Go designers intended them to be 
> there for.  As I understand it, the point of defining the concept of 
> the methods sets is there to properly define Go's implicit 
> implementation of interfaces -- as opposed to defining some (imaginary) 
> set of rules dealing with "method sharing" between types T and *T. 
>
> So I interpret this part of the spec in a way along these lines: 
>
> | *T implicitly implements the interface formed by own methods of 
> | its "pair" type T. 
>
> This means we can do: 
>
>   package main 
>   
>   type Doer interface { 
>     Do() 
>   } 
>   
>   type T struct{} 
>   
>   func (t T) Do() { 
>   } 
>   
>   func fn(d Doer) { 
>     d.Do() 
>   } 
>   
>   func main() { 
>     t := T{} 
>     p := &T{} 
>   
>     fn(t) 
>     fn(p)         
>   } 
>
> Here, the function fn() expects anything which implements the Doer 
> interface, and the values of type T and *T are both fine to pass to it 
> because *T implements the method Do() of its pair type T. 
>

Yes, I know the rules.
I still think my interpretation in my 3rd comment is a better explanation.
 

-- 
You received this message because you are subscribed to the Google Groups 
"golang-nuts" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to golang-nuts+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to