golang封装简单应用
main.go
package main import ( "fmt" "github.com/面向对象编程/面向对象编程思想/封装/model" ) /* 封装(encapsulation)就是把抽象出的字段和字段的操作封装在一起, 数据被保护在内部,程序的其他包只有通过被授权的操作,才能对字段进行操作 封装的理解和好处 1.隐藏实现细节 2.可以对数据进行验证,保证安全合理 如何体现封装 1.对结构体中的属性进行封装 2.通过方法,包实现封装 实现步骤 1.将结构体、字段的首字母小写(不能导出,其他包不能使用) 2.给结构体所在包提供一个工厂模式的函数,首字母大写。类似一个构造函数 3.提供一个首字母大写的Set方法,用于对属性判断并赋值 func (var 结构体类型名) SetXxx(参数列表)(返回值列表){ var.字段 = 参数 } 4.提供一个首字母大写的Get方法,用于获取属性的值 func (var 结构体类型名) GetXxx(){ return var.字段 } */ //不能随便查看人的年龄,工资等隐私,并对输入的年龄进行合理验证 //model包(person.go)main包(main.go调用Person结构体) func main() { person := model.NewPerson("smith") person.SetAge(18) person.SetSal(15000) fmt.Println(person) fmt.Println("姓名为", person.Name, "年龄为", person.GetAge(), "薪水为", person.GetSal()) }
person.go
package model import "fmt" type person struct { Name string age int //其他包不能访问 sal float64 } //写一个工厂模式函数,相当于构造函数 func NewPerson(name string) *person { return &person{ Name: name, } } func (p *person) SetAge(age int) { if age > 0 && age < 200 { 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 }