当前位置: 首页 > news >正文

37-Golang中的封装

封装介绍

封装就是把抽象出的字段和对字段的操作封装在一起,数据被保护在内部,程序的其他包只有通过被授权的操作(方法),才能对字段进行操作

封装的理解和好处

1.隐藏实现细节

2.可以对数据进行验证,保证安全合理

如何体现封装

1.对结构体中的属性进行封装

2.通过方法,包实现封装

封装实现的步骤

  • 1.将结构体、字段(属性)的首字母小写(不能导出了,其他包不能使用)

  • 2.给结构体所在包提供一个工厂模式的函数,首字母大写。类似一个构造函数

  • 3.提供一个首字母大写的Set方法,用于对属性判断并赋值

    func(var 结构体类型名)Set xxx(参数列表)(返回值列表){

    ​ //加入数据验证的业务逻辑

    ​ var.字段 = 参数

    }

  • 4.提供一个首字母大写的Get方法,用于获取属性的值

    func(var结构体类型名) Getxxx(){

    ​ return var.字段

    }

    说明:在golang中没有特别强调封装,golang本身对面向对象的特性做了简化的

案例

person包package model
import "fmt"
type person struct {Name stringage int //其他包不能直接访问sal float64
}//写一个工厂模式的函数,相当于构造函数
func NewPerson(name string) *person {return &person{Name : name,}
}//为了访问age和sal编写一对Setxxx的方法和Getxxx的方法
func (p *person) SetAge(age int) {if age > 0 && age < 150 {p.age = age} else {fmt.Println("年龄范围不正确")}
}func (p *Person) GetAge() int {return p.age
}func (p *person) SetSal(sal int) {if sal >= 3000 && sal < 30000 {p.sal = sal} else {fmt.Println("薪水范围不正确")}
}func (p *Person) GetSal() float64  {return p.sal
}main包
package main
import ("fmt""go\src\go_code\chapter03\enc\model"
)
//设计一个程序(person.go),不能随便看人的年龄,工资等隐私,
//并对输入的年龄进行合理的验证。设计:model包(person.go)main包(main.go调用person结构体)
func main(){p := model.NewPerson("smith")p.SetAge(18)p.SetSal(5000)fmt.Println(p)fmt.Println(p.Name, "age=", p.GetAge(), "sal=", p.GetSal())
}
http://www.lryc.cn/news/17552.html

相关文章:

  • Python Pytorch开发环境搭建(Windows和Ubuntu)
  • 多种方法进行去基线处理
  • 二叉树——最大二叉树
  • 【Redis】Redis 的过期策略以及内存淘汰机制详解
  • 边缘云是什么?
  • Java常用数据结构
  • 【Java基础 下】 026 -- 集合进阶(不可变集合、Stream流、方法引用)
  • SAP 跨工厂或特定工厂的物料状态设置
  • jupyter的安装步骤
  • Optional使用详解
  • 如何实现文件高速传输,推荐镭速高速文件传输解决方案
  • SpringBoot整合Mybatis+人大金仓(kingbase8)
  • TPM 2.0实例探索2 —— LUKS磁盘加密(3)
  • 嵌入式Debian主机可接HDMI显示
  • 驱动程序开发:基于ICM20608六轴传感器 --- 使用Regmap API 的 SPI 读取数据 之 IIO驱动
  • 专利撰写 为什么要申请专利 申请专利对个人有什么利益关系 专利申请实例 如何申请专利 专利申请办理流程
  • yolov5/6/7系列模型训练日志结果数据对比分析可视化
  • ppppp2-23
  • 【GeoDjango框架解析——读取矢量数据写入postgis数据库】
  • 注意啦!如何通过广告吸引客户直接下单?
  • ThinkPHP ^6图片操作进阶
  • 深入理解JS作用域链与执行上下文
  • UnityEditor编辑器扩展代码实现Project搜索的实现功能和切换Component等
  • SKAdNetwork:从0到1
  • Spring+MVC+MYbatis注解开发
  • Redis主从复制过程
  • Spring boot开启定时任务的三种方式(内含源代码+sql文件)
  • Tekton实战案例--S2I
  • 四、使用类实现功能
  • Java多线程不安全的例子