Golang如何体现面向对象三大特征之封装?
Posted Casey321
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Golang如何体现面向对象三大特征之封装?相关的知识,希望对你有一定的参考价值。
封装
基本介绍
Golang仍然有面向对象编程的继承、封装和多态的特性,只是实现的方法和其它OOP语言不一样,下面我们来看看Golang是如何实现封装的。
封装介绍
封装(encapsulation)就是把抽象出的字段和对字段的操作封装在一起,数据被保护在内部,程序的其它包只有通过被授权的操作(方法)才能对字段进行操作。
封装的好处
- 隐藏实现细节。
- 可以对数据进行验证等。
golang如何体现封装
- 对结构体中的属性进行封装
- 通过方法,包实现封装
封装的实现
- 将结构体,字段(属性)的首字母小写(其他包不能使用,类似private)。
- 给结构体所在包提供一个工厂模式的函数,首字母大写。类似一个构造函数。
- 提供一个首字母大写的set方法(类似其它语言的public),用于对属性判断并赋值。
- 提供首字母大写的get方法,用于获取属性的值。
特别说明:在Golang开发中并没有特别强调封装,这点并不像Java,所以不能总是用java的语法特性来看待Golang,Golang本身对面向对象的特征做了简化。
代码实现:
student.go
package model
import(
"fmt"
)
type student struct
name string
age int
func NewStudent(name string,age int) *student
return &student
name : name,
age : age,
func (this *student) GetName()string
return this.name
func (this *student) SetName(name string)
this.name = name
func (this *student) GetAge()int
return this.age
func (this *student) SetAge(age int)
//对年龄合法性校验
if age > 0 && age <150
this.age = age
else
fmt.Println("年龄不合法...")
test.go
package main
import(
"fmt"
"go_code/OOP/model"
)
func main()
stu := model.NewStudent("Casey",18)
fmt.Println(*stu)
stu.SetName("321")
fmt.Println(stu.GetName())
stu.SetAge(20)
fmt.Println(stu.GetAge())
运行结果:
博主首页链接:https://blog.csdn.net/weixin_44736475
原创不易,希望大家多多支持
如果文章对你有帮助,记得一键三连哦!❤️❤️❤️
以上是关于Golang如何体现面向对象三大特征之封装?的主要内容,如果未能解决你的问题,请参考以下文章