Golang中--面向对象封装

    学习过Python或者java的朋友,都会习惯里面的类,而Golang中是没有类的概念,而有相似的概念结构体,结构体是一款功能强大的数据类型,可以简单的实现其余语言中类实现的功能,可以序列化json,支持继承,在继承时,继承父结构体的属性和父结构体的方法。同时结构体也像其余数据结构和函数同样,以大写字母开头的结构体可以导出本包,应用到其余包。而当开始定义的一些小写字母定义的结构体,咱们想要用于其余包的时候,能够用工厂函数的方式实现。此外能够使用工厂函数结合定义某些方法实现面向对象的封装特性。java

封装的介绍:json

    封装(encapsulation)就是把抽象出的字段和对字段的操做封装在一块儿,数据被保护在内部,程序的其 它包只有经过被受权的操做(方法),才能对字段进行操做。安全

封装的理解和好处:bash

1) 隐藏实现细节数据结构

2)  能够对数据进行验证,保证安全合理(某些字段)ide

如何体现封装
1) 对结构体中的属性进行封装
函数

2) 经过方法,包 实现封装学习

封装的实现步骤
spa


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 自己对面向对象的特性作了简化的.

相关示例

image.png

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.()



}


结果

image.png

相关文章
相关标签/搜索