Welcome everybody, I'm happy after reading comments which you post on subreddits. Thankyou. Today, i will write my article on compose complex types but in end i give you a simple task, can you do that?
Types:
In golang we create types in two ways
1. type-keyword name-keyword datatype
type Meter float64
2. by using struct which you are familiar about.
Let's start with simple example, so that we can understand how to do that.
Problem: I have two CEO, one CEO is elon musk and other is mark zuckerberg. Both CEO are also person and own attributes such as name or company.
If you know Object oriented approach you might think like this person is the person class and ceo is derived class. However this is not pure object oriented language, so that is not a solution. How can i solve?
Oh Yeah, I build a struct type person, that hold all the attributes which person have. But the question what i do with ceo?
I hope you know embed struct and anonymous structs concepts if, yes then problem solve. If you don't know then i will teach you with example
type person struct{
name string
}
type ceo struct {
p Person // embed struct
}
If you write another struct in which first struct parameter is the part of second struct then it's embed struct.
type person struct{
name string
}
type ceo struct {
Person // anonymous struct
}
Without parameter ceo struct called anonymous strut.
<Code/>
package main
import (
"fmt"
)
type Person struct{
name string
company_own string
}
type CEO struct{
Person
}
var ceo CEO
func(c *CEO)Description(){
switch c.name {
case "Elon":
fmt.Println("Name:",c.name,"\t","Company:",c.company_own,"\t","He is an innovator ")
break;
case "Mark":
fmt.Println("Name:",c.name,"\t","Company:",c.company_own,"\t","He work on social media ")
break;
}
}
func main() {
c := &ceo
c.name = "Elon"
c.company_own = "Tesla, SpaceX"
c.Description()
owner:= CEO{Person{"Mark","Facebook"}}
owner.Description()
}
Types:
In golang we create types in two ways
1. type-keyword name-keyword datatype
type Meter float64
2. by using struct which you are familiar about.
Let's start with simple example, so that we can understand how to do that.
Problem: I have two CEO, one CEO is elon musk and other is mark zuckerberg. Both CEO are also person and own attributes such as name or company.
If you know Object oriented approach you might think like this person is the person class and ceo is derived class. However this is not pure object oriented language, so that is not a solution. How can i solve?
Oh Yeah, I build a struct type person, that hold all the attributes which person have. But the question what i do with ceo?
I hope you know embed struct and anonymous structs concepts if, yes then problem solve. If you don't know then i will teach you with example
type person struct{
name string
}
type ceo struct {
p Person // embed struct
}
If you write another struct in which first struct parameter is the part of second struct then it's embed struct.
type person struct{
name string
}
type ceo struct {
Person // anonymous struct
}
Without parameter ceo struct called anonymous strut.
<Code/>
package main
import (
"fmt"
)
type Person struct{
name string
company_own string
}
type CEO struct{
Person
}
var ceo CEO
func(c *CEO)Description(){
switch c.name {
case "Elon":
fmt.Println("Name:",c.name,"\t","Company:",c.company_own,"\t","He is an innovator ")
break;
case "Mark":
fmt.Println("Name:",c.name,"\t","Company:",c.company_own,"\t","He work on social media ")
break;
}
}
func main() {
c := &ceo
c.name = "Elon"
c.company_own = "Tesla, SpaceX"
c.Description()
owner:= CEO{Person{"Mark","Facebook"}}
owner.Description()
}
If you are checkout how this program work Hola.
This is very useful at package level variables , which i discuss upcoming articles.
Question : You can do this example by pointers. Thankyou, have a great day
Comments
Post a Comment