Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Golang struct calling embedded type methods when method has been overloaded

Tags:

go

I am trying to learn Go, and I found a good resource here.

The example given on method overloading is reproduced below:

package main import "fmt"  type Human struct {     name string     age int     phone string }   type Employee struct {     Human      company string }  func (h *Human) SayHi() {     fmt.Printf("Hi, I am %s you can call me on %s\n", h.name, h.phone) }  func (e *Employee) SayHi() {     fmt.Printf("Hi, I am %s, I work at %s. Call me on %s\n", e.name,         e.company, e.phone) //Yes you can split into 2 lines here. }  func main() {     sam := Employee{Human{"Sam", 45, "111-888-XXXX"}, "Golang Inc"}     sam.SayHi() } 

Is it possible to call the "base" struct's (Human's) methods, eg. sam.Human.SayHi() Downcasting doesn't work (because there is no type hierarchy right?)

like image 492
Lee Avatar asked Dec 31 '13 18:12

Lee


1 Answers

You can access the embedded struct of a parent struct by calling the member of the parent with the name of the embedded type's name. That's a mouthful, so it's probably easier to demonstrate it.

 sam := Employee{Human{"Sam", 45, "111-888-XXXX"}, "Golang Inc"}  sam.SayHi() // calls Employee.SayHi  sam.Human.SayHi() // calls Human.SayHi 

Outputs

 Hi, I am Sam, I work at Golang Inc. Call me on 111-888-XXXX  Hi, I am Sam you can call me on 111-888-XXXX 
like image 143
Hunter Fernandes Avatar answered Sep 19 '22 09:09

Hunter Fernandes