1.简介
go具有面向对象编程的封装、继承和多态的特性,只是实现的方式和其它OOP语言不一样,下面看下go的三大特性是如何实现的。
2.封装
2.1基本介绍
封装就是把抽象出的字段和对字段的操作封装在一起,数据被保护在内部,程序的其它包只能通过被授权的操作(方法),才能对字段进行操作。
优点:
- 隐藏细节。
- 可以对数据进行验证,保证安全合理。
2.2封装的实现步骤
- 将结构体、字段(属性)的首字母小写(不能导出了,其他包不能使用)。
- 给结构体所在包提供一个工厂模式的函数,首字母大写。类似一个构造函数。
- 提供一个首字母大写Set方法(类似java中的public),用于堆属性判断并赋值。
- 提供一个首字母大写的Get方法,用于获取属性的值。
2.3案例
2.3.1案例一
需求:封装一个小学生程序,不能随便查看学生的年龄、姓名和性别。
设计:model包main包调用学生对象
model包里面的student.go
package model
import "fmt"
// 结构体和属性首字母小写其他包不能直接访问
type student struct {
ID int
name string
age int
sex string
}
func (s *student) SetName(name string) {
if len(name) > 1 && len(name) < 5 {
s.name = name
} else {
fmt.Println("请输入正确的姓名!")
}
}
func (s *student) GetName() string {
return s.name
}
func (s *student) SetAge(age int) {
if age > 6 && age < 12 {
s.age = age
} else {
fmt.Println("年龄不在指定范围")
}
}
func (s *student) GetAge() int {
return s.age
}
func (s *student) SetSex(sex string) {
if sex == "男" || sex == "女" {
s.sex = sex
} else {
fmt.Println("请输入正确的性别!")
}
}
func (s *student) GetSex() string {
return s.sex
}
// 定义一个工厂模式函数
func NewStudent(id int) *student {
return &student{
ID: id,
}
}
main.go
package main
import (
"demo