- 封装的实现
func (p *Person)SetName(name string){
p.name = name
}
在Go语言中封装就是把抽象出来的字段和对字段的操作封装在一起,数据被保护在内部,程序的其它包只能通过被授权的方法,才能对字段进行操作。封装的实现主要体现在对结构体中的属性进行封装,通过方法或包 ,实现封装。注意的是Golang开发并没有特别强调封装,这点并不像Java,不用总是用Java的语法特性来看待Golang,Golang本身对面向对象的特性就做了简化。
例:
//结构体定义
type Company struct{
name string
address string
website string
createDate int
}
func main(){
p :=NewPerson("知链")
p.SetCompany(2018)
fmt.Println(p)
fmt.Println(p.name,"createDate = ",p.GetCompany())
}
func NewPerson(name string) *Company{
return &Company{
name:name,
}
}
func(p *Company)GetCompany()int{ //封装,有返回值,故有int
return p.createDate
}
func(p *Company)SetCompany(createDate int){ //封装,
if createDate < 2022 && createDate > 1949 {
p.createDate = createDate
}else{
fmt.Println("创建时间范围不确定..")
}
}
2.1.继承的实现
golang本质上没有oop的概念,也没有继承的概念,但是可以通过结构体嵌套实现这个特性。继承的实质是结构体的嵌套。例如B继承A, 即在B结构体中 声明 A匿名结构体。结构体可以使用嵌套匿名结构体的所有字段加方法(即:同一个包中,首字母大写和小写的字段、方法,都可以使用)。
例:有一名名叫小明的同学,在某单位就职。请输出小明的相关信息:
type company struct{
Name string
Addr string
}
type staff struct{
name string
age int
gender string
position string
company
}
func main(){
myCom :=company{
"知链科技",
"北京",
}
staffInfo := staff{
"小明",
12,
"男",
"研发工程师",
myCom,
}
fmt.Printf("%s在%s工作\n",staffInfo.name,staffInfo.Name)
fmt.Printf("%s在%s工作\n",staffInfo.name,staffInfo.company.Name)
}
2.2.继承的嵌套
type Goods struct { //结构体声明
Name string
Price float64
}
type Brand struct {
Name string
Address string
}
// 匿名结构体
type TV struct {
Goods
Brand
}
func main() { //主函数
tv := TV{Goods{"电视机001", 5000.99}, Brand{"海尔", "山东"}} //结构体赋值
tv2 := TV{
Goods{
Price: 5000.99,
Name: "电视机002",
},
Brand{
Name: "夏普",
Address: "北京",
},
}
fmt.Println(tv) //语句&表达式输出
fmt.Println(tv2)
}