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 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