学习过Python或者java的朋友,都会习惯里面的类,而Golang中是没有类的概念,而有类似的概念结构体,结构体是一款功能强大的数据类型,能够简单的实现其他语言中类实现的功能,能够序列化json,支持继承,在继承时,继承父结构体的属性和父结构体的方法。同时结构体也像其他数据结构和函数一样,以大写字母开头的结构体能够导出本包,应用到其他包。而当开始定义的一些小写字母定义的结构体,我们想要用于其他包的时候,可以用工厂函数的方式实现。此外可以使用工厂函数结合定义某些方法实现面向对象的封装特性。
创新互联建站自2013年起,先为邵武等服务建站,邵武等地企业,进行企业商务咨询服务。为邵武企业网站制作PC+手机+微官网三网同步一站式服务解决您的所有建站问题。
封装的介绍:
封装(encapsulation)就是把抽象出的字段和对字段的操作封装在一起,数据被保护在内部,程序的其 它包只有通过被授权的操作(方法),才能对字段进行操作。
封装的理解和好处:
1) 隐藏实现细节
2) 可以对数据进行验证,保证安全合理(某些字段)
如何体现封装
1) 对结构体中的属性进行封装
2) 通过方法,包 实现封装
封装的实现步骤
1)将结构体、字段(属性)的首字母小写(不能导出了,其它包不能使用,类似private)
2)给结构体所在包 供一个工厂模式的函数,首字母大写。类似一个构造函数
3) 供一个首字母大写的Set方法(类似其它语言的public),用于对属性判断并赋值
func (var结构体类型名) SetXxx(参数列表) (返回值列表) {
//加入数据验证的业务逻辑
var.字段=参数}
4) 供一个首字母大写的Get方法(类似其它语言的public),用于获取属性的值func (var结构体类型名) GetXxx() {
return var.age; }
特别说明:在Golang开发中并没有特别强调封装,这点并不像Java.所以 醒学过java的朋友, 不用总是用java的语法特性来看待Golang, Golang本身对面向对象的特性做了简化的.
相关示例

package person
import "fmt"
//定义不能导出的结构体
type person struct {
Name string
age int
sal float64
}
//定义工厂模式的函数 首字母大写 类似构造函数
func NewPerson(name string) *person{
return &person{
Name:name,
}
}
//提供一个Set方法 设置年龄
func (user *person) Setage(age int) {
if age >0 && age < 150 {
user.age = age
}else {
fmt.Println("年龄数值不对!")
}
}
//获取年龄
func (user *person) Getage() int{
return user.age
}
//更改年龄
func (user *person) Updateage(age int) int{
user.age =age
return user.age
}
//更改姓名
func (user *person) Updatename(name string) string{
user.Name=name
return user.Name
}在另一个包中调用person
main
(
)
() {
person.()
fmt.()
.()
fmt.()
.()
fmt.()
.()
fmt.()
fmt.()
.()
fmt.()
}结果

分享文章:Golang中--面向对象封装
本文网址:http://www.jxjierui.cn/article/jedidh.html


咨询
建站咨询
