封装

* 本页面主要介绍Go语言封装的相关内容。

相信你一定记得面向对象编程的三大特性:继承,封装和多态!Go语言作为现代编程语言,当然也是支持封装的,只不过和其他的OOP语言会有一些不一样而已?具体是什么不一样的呢?下面我们就来揭开它的神秘面纱!

一、啥是封装?

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

来,哥保护你!封装之后,可以带来以下好处:

  • 因为调用方不能直接修改对象的变量值,其只需要关注少量的语句并且只要弄懂少量变量的可能的值即可
  • 隐藏实现细节,可以防止调用方依赖那些可能变化的具体实现,这样使设计包的程序员在不破坏对外的api情况下能得到更大的自由
  • 可以对数据进行验证,保证安全合理,阻止了外部调用方对对象内部的值任意地进行修改,比如月份的取值范围等

所以,我们如果不想让某些变量或者方法对调用者可见的话,那就可以把它“封装”起来,这样就可以达到“信息隐藏”的目的啦~

二、如何实现封装?

Go语言只有一种控制可见性的手段:大写首字母的标识符会从定义它们的包中被导出,小写字母的则不会。

  • 将结构体、字段(属性)的首字母小写(不能导出了,其它包不能使用,类似 private)
  • 给结构体所在包提供一个工厂模式的函数,首字母大写。类似一个构造函数
  • 提供一个首字母大写的 Set 方法(类似其它语言的 public),用于对属性判断并赋值
  • 提供一个首字母大写的 Get 方法(类似其它语言的 public),用于获取属性的值
  func (var 结构体类型名) SetXxx(参数列表) (返回值列表) {
      //加入数据验证的业务逻辑
      var.字段 = 参数
  }

  func (var 结构体类型名) GetXxx() {
      return var.age;
  }

这就是Go语言中的封装。另外,通过我们把struct看做类,struct中可以包含其他的struct,继承内部struct的方法和变量,同时可以重写,这样来实现OOP的继承。不过Go语言中的多态比Java的隐匿得多,严格上说没有多态,但可以利用接口进行,对于都实现了同一接口的两种对象,可以进行类似地向上转型,并且在此时可以对方法进行多态路由分发。

继承的知识点就总结到这里了,你学会了吗?


* 本页内容参考以下数据源:

  • 《Go程序设计语言》
  • https://www.cnblogs.com/sonfer/p/12781537.html

凯冰科技 · 代码改变世界,技术改变生活
下一篇:高并发原理 →