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/ > topic/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.