开发者学堂课程【Go 语言核心编程 - 面向对象、文件、单元测试、反射、TCP 编程:封装快速入门案例】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/626/detail/9688
封装快速入门案例
内容简介:
一、案例要求
二、代码实现
一、 案例说明
1. 案例要求
请大家看一个程序( person.go ),即要创作一个人的一个结构体,但是不能随便查看人的年龄、工资等隐私,并对输入的年龄进行合理的验证。
2. 案例设计
设计: model 包( person.go ) main 包( main.go 调用 Person 结构体)
二、代码实现
首先新建一个文件夹称为”encapsulate”,随后再建两个包(不要建文件夹),其中一个包称为”model”,另一个包称为”main”,在model 包里新建一个文件夹叫 person.go ,开始输入代码:
package model
import “fmt”
type person struct {
//这里的 person 首字母小写是因为想将其封装起来,在实际开发中不一定非要小写
Name string
age int
//其他包不能直接访问...
sal float64
}
注意:此时 person 是用不到 main 包中的,所以需以下代码
//写一个工厂模式的函数,相当于构造函数
func NewPerson(name string) *person {
return &person{
Name : name,
}
}
//为了访问 age 和 sal 我们编写一对 SetXxx 的方法和 GetXxx 的方法
func (p *person) SetAge(age int) {
if age >0 && age <150 {
p.age = age
} else {
fmt.Println(“你的年龄范围不正确..”)
//给程序员一个默认值
}
}
func (p *person) GetAge( ) int {
return p.age
}
func (p *person) SetSal(sal float64) {
if sal >= 3000 && sal <= 30000 {
p.sal = sal
} else {
fmt.Println(“薪水范围不正确..”)
}
}
func (p *person) GetSal( ) float64 {
return p.sal
}
随后在 main 中新建一个文件称为”main.go”,并输入以下代码,看看是否能够顺利执行:
package main
import (
“fmt”
“go_code/chapter11/encapsulate/model”
)
func main() {
p := model.NewPerson(“smith”)
fmt.Println(p)
}
以下为执行结果:
D:\goproject\src\go_code\chapter11\encapsulate\main>go run main.go
&
将上文中的一些地方加以修改,如下文所示:
package main
import (
“fmt”
“go_code/chapter11/encapsulate/model”
)
func main() {
p := model.NewPerson(“smith”)
p.SetAge(18)
p.SetSal(5000)
fmt.Println(p)
}
上述代码的执行结果为:
D:\goproject\src\go_code\chapter11\encapsulate\main>go run main.go
&
再将上文中的一些地方加以修改,如下文所示:
package main
import (
“fmt”
“go_code/chapter11/encapsulate/model”
)
func main() {
p := model.NewPerson(“smith”)
p.SetAge(18)
p.SetSal(5000)
fmt.Println(p)
fmt.Println(p.Name,“age= ”,P.GetAge(),”sal=”,p.Getsal())
}
以上代码执行结果为:
D:\goproject\src\go_code\chapter11\encapsulate\main>go run main.go
&
smith age = 18 sal = 5000