On Tuesday, October 18, 2016 at 9:27:36 PM UTC+3, Konstantin Khomoutov wrote: > > On Tue, 18 Oct 2016 11:11:59 -0700 (PDT) > parais...@gmail.com <javascript:> wrote: > > > Obviously in Go this is a compile time error : > > > > type Foo interface {} > > > > > > func (f Foo) DoSomething(){} > >
> I wonder if there is some technical limitations that make it > > undesirable or hard to implement, or it's just that Go designers > > didn't think it is a relevant feature. > > > > I personally think there is it could be handy in some situations, > > instead of having to write a function without receiver, it could > > allow to attach behavior to interfaces automatically > > instead of the explicit : > > > > func DoSomething(f Foo){} > > > > > > what is your opinion on the matter ? Unfortunately I wasn't able to > > catch anyone of the Go team during the recent conference in Paris to > > ask that question. > > type Foo interface { > func DoSomething() > } > > func (f Foo) DoSomething() { > } > > var f Foo > > f.DoSomething() > > How do you propose to distinguish these two DoSomething()-s? > That's just a default method implementation. There's nothing inherently confusing about what gets called. If a concrete implementation exists, that gets called, otherwise the default one does. > > More to the point: how could anyone infer what's about to get called > from looking at that "f.DoSomething()" expression even if there could > be no conflict as in my contrived example -- is it a call on an > "interface itself" or on a concrete type an interface value contains? > -- 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.