Oh, I think you might not have notice this request from OP: Please think of the "func Output()" as a very complicated function that I > only want to define *once *at the base level, not to duplicate into each > sub classes.
On Wed, Nov 23, 2016 at 10:16 AM, Tong Sun <suntong...@gmail.com> wrote: > Can you make it work on play.golang.org, from this code > https://play.golang.org/p/QjCtD9rGpa, according to your plan? > > On Wed, Nov 23, 2016 at 10:14 AM, Nick Patavalis <nick.patava...@gmail.com > > wrote: > >> Yes... so every specific animal type implements it's own Output() method, >> which does the trivial IsA() part, and calls Animal's Output() for the >> common complicated parts... >> >> On Nov 23, 2016 16:35, "Tong Sun" <suntong...@gmail.com> wrote: >> >>> Have you noticed the IsA() func call there? >>> >>> On Wed, Nov 23, 2016 at 4:05 AM, Nick Patavalis < >>> nick.patava...@gmail.com> wrote: >>> >>>> Hi, >>>> >>>> In your *second* example, making Output() a method of Animal will work, >>>> since it uses only the members (fields) of Animal, and not the fields of >>>> specific animals (or any behavior that varies between animals). That's why >>>> I'm insisting on *real* and *specific* examples, not synthetic ones. >>>> >>>> /npat >>>> >>>> On Wednesday, November 23, 2016 at 6:08:00 AM UTC+2, Tong Sun wrote: >>>>> >>>>> No Nick, making Output() a member method won't work. >>>>> See my OP and Jesse's answer. I.e., I have to change it from a member >>>>> function to a pure function. >>>>> >>>>> On Tue, Nov 22, 2016 at 6:25 PM, Nick Patavalis <nick.pa...@gmail.com> >>>>> wrote: >>>>> >>>>>> Hi, >>>>>> >>>>>> There is no direct mapping of what you can do with virtual functions >>>>>> in other OO languages, and Go. There are different compromises you have >>>>>> to >>>>>> make; because of this, synthetic examples will probably not help much. >>>>>> >>>>>> That being said, in the case of your last example I would make >>>>>> Output() a method of Animal. >>>>>> The Speak() methods of the specific animals would then call Output(). >>>>>> >>>>>> /npat >>>>>> >>>>>> On Wednesday, November 23, 2016 at 12:03:54 AM UTC+2, Tong Sun wrote: >>>>>>> >>>>>>> >>>>>>> >>>>>>> On Tue, Nov 22, 2016 at 4:29 PM, Jesse McNelis wrote: >>>>>>> >>>>>>>> On Wed, Nov 23, 2016 at 8:16 AM, Tong Sun wrote: >>>>>>>> > Hi, >>>>>>>> > >>>>>>>> > How to architect the OO's virtual function in Go? >>>>>>>> > >>>>>>>> > Please take a look at this (not working) Go program >>>>>>>> > https://play.golang.org/p/qrBX6ScABp >>>>>>>> > >>>>>>>> > Please think of the "func Output()" as a very complicated >>>>>>>> function that I >>>>>>>> > only want to define once at the base level, not to duplicate into >>>>>>>> each sub >>>>>>>> > classes. >>>>>>>> > >>>>>>>> > How can I make it works so that the last output statement, >>>>>>>> instead of being, >>>>>>>> > >>>>>>>> > fmt.Printf("[%v] %s: [%0.2f]\n", k, v.Name(), v.Area()) >>>>>>>> > >>>>>>>> > >>>>>>>> > will be this instead: >>>>>>>> > >>>>>>>> > fmt.Printf("[%v] %s\n", k, v.Output()) >>>>>>>> > >>>>>>>> >>>>>>>> You define a function: >>>>>>>> >>>>>>>> func Output(s Shape) string { >>>>>>>> return s.Name() + "'s area size is " + s.Area() >>>>>>>> } >>>>>>>> >>>>>>>> Go uses interfaces for polymorphism. >>>>>>>> Other OOP languages can use inheritance for polymorphism too, but Go >>>>>>>> doesn't have inheritance. >>>>>>>> >>>>>>> >>>>>>> Thanks Jesse. That works. >>>>>>> >>>>>>> However I just realized that it is only part of my problem. >>>>>>> >>>>>>> I have a huge list of common variables that I defined in my "base >>>>>>> class", changing it from a member function to a pure function causes >>>>>>> almost >>>>>>> every single variable now undefined. >>>>>>> >>>>>>> I can demonstrate the problem with this code >>>>>>> https://play.golang.org/p/QjCtD9rGpa >>>>>>> >>>>>>> So, once again, thinking in OO, I'll define all of the common >>>>>>> variables in base class, and common functionalities in virtual >>>>>>> functions. >>>>>>> How to make that idea work in Go? >>>>>>> >>>>>>> For the above specific code, how to easily make "func Output" works? >>>>>>> >>>>>>> Thanks >>>>>>> >>>>>>> -- >>>>>> You received this message because you are subscribed to a topic in >>>>>> the Google Groups "golang-nuts" group. >>>>>> To unsubscribe from this topic, visit https://groups.google.com/d/to >>>>>> pic/golang-nuts/f_62HEOIBV4/unsubscribe. >>>>>> To unsubscribe from this group and all its topics, send an email to >>>>>> golang-nuts...@googlegroups.com. >>>>>> For more options, visit https://groups.google.com/d/optout. >>>>>> >>>>> >>>>> -- >>>> You received this message because you are subscribed to a topic in the >>>> Google Groups "golang-nuts" group. >>>> To unsubscribe from this topic, visit https://groups.google.com/d/to >>>> pic/golang-nuts/f_62HEOIBV4/unsubscribe. >>>> To unsubscribe from this group and all its topics, send an email to >>>> golang-nuts+unsubscr...@googlegroups.com. >>>> For more options, visit https://groups.google.com/d/optout. >>>> >>> >>> > -- 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.