封装
# 1. 封装的介绍
# 什么是封装:
封装(encapsulation)就是把抽象出的字段和对字段的操作封装在一起,数据被保护在内部,程序的其它包只有通过被授权的操作方法,才能对字段进行操作。
# 封装的好处:
隐藏实现细节
提可以对数据进行验证,保证安全合理
# Golang中如何实现封装:
建议将结构体、字段(属性)的首字母小写(其它包不能使用,类似private,实际开发不小写也可能,因为封装没有那么严格)
给结构体所在包提供一个工厂模式的函数,首字母大写(类似一个构造函数)
提供一个首字母大写的Set方法(类似其它语言的public),用于对属性判断并赋值 func (var 结构体类型名)SetXxx(参数列表){ //加入数据验证的业务逻辑 var.Age =参数 }
提供一个首字母大写的Get方法(类似其它语言的public),用于获取属性的值 func (var结构体类型名) GetXxx() (返回值列表){ return var.字段; }
package main
import "fmt"
// 定义结构体
type person struct {
name string
age int
}
// 定义get方法
func (p person) getAge() {
fmt.Println(p.age)
}
// 定义set方法
func (p *person) setAge(age int) {
if age > 0 && age < 200 {
(*p).age = age
} else {
fmt.Println("年纪输入有误", age)
}
}
// NewPerson 定义工厂函数,外部访问结构体中的字段
func NewPerson(name string, age int) *person {
return &person{name: name, age: age}
}
func main() {
var p = new(person)
(*p).setAge(2001)
p.getAge()
// 访问结构体
var p1 = NewPerson("高起强", 18)
fmt.Println(*p1)
}
/*
年纪输入有误 2001
0
{高起强 18}
*/
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
# 实现方式二:
编辑 (opens new window)