面向过程转换到面向对象,那么必然会涉及到几个特性:封装,继承,多态,那么Golang中的面向过程会有什么特性?那我们来仔细说一说:
封装:
首先要一个类的概念,类就像一下工厂,你需要的衍生类,直接通过工厂类可以实现,简单来理解就是:公共方法,我们把它放在项目的最外层,需要用到的时候直接调用该类,这样做的好处就是减少代码量,并且代码的容错率都健壮性都会有相应的提升
继承:
简单来说就是继承父辈的一些东西,代码中也是如此,一些共用的属性我们可以把他们集中到一个特殊的父级代码中,通过继承来实例化一些公共的属性,这样做的好处:统一管理公共的属性,不会出现多个开发工程师写出了多个“哈姆雷特”的现象,只要遵循公共属性通过继承获取父级的属性,那么代码的通用性会大大提高
多态:
同一个性质的不同表现方式,比如接口里面定义的方法的具体实现是多种多样的,继承父级获取的方法,可以直接使用也可以重新定义后再使用,从而使一个方法有多种表现形式导致不同的结果产生
代码解释:
封装和继承:其实我们在前面的GIN框架中已经使用过,比如我们应用的包,都是封装好的类,如果这样说还是无感的话,那么GORM中有一个特别明显的用法,比如我们在数据库的操作的过程中,首先需要定义结构体,在定义的过程中我们使用到了: gorm.Model ,这一个例子就很好的说明了这两个属性,首先来说疯转,看下源码:
自定义结构体:
type Userst struct {
Uid uint64 `json:"uid"`
Username string `json:"username" `
gorm.Model
}
gorm.Model指向的就是下面的代码:
type Model struct {
ID uint `gorm:"primarykey"`
CreatedAt time.Time
UpdatedAt time.Time
DeletedAt DeletedAt `gorm:"index"`
}
封装到这里就结束了,那么继承还有一些注意点还需要深入的讲解,所以我们下面就讲一下继承中的就近原则,这个词是不是特别熟悉?SQL中有一个最左原则,最左原则有兴趣的可以课外了解一下,我们主要讲解集成中的就近原则
机构体需要了解的概念:
1.结构体,如果结构体的名字首字母大写,可以被其他地方调用,如果是小写,其他地方不能被调用,只能在当前作用域调用
2.结构体属性,如果是首字母大写,可以被其他地方赋值(指针方式来实现),如果是小写,其他地方不能被调用,只能在当前作用域调用
打印结果:
分析:uid没有进行赋值,所以输出的是0,其他的字段赋值了,输出的是赋予的值
那么我们换一个赋值方式:
打印结果:
从上面的代码来看两种赋值方式都可以,其实上这是有区别的,到底是有什么区别?我们再看看新的代码:
输出结果:
分析:为什么会这个样子?实际上就是就近原则,另外还有一种情况,看下面的距离
代码段:
输出结果:
分析:如果子级结构体集成父级结构体,子级结构体与父级结构体有相同的属性,先满足子集结构体的赋值,这也是就近原则的一种体现,并且以上例子也体现了多态,结合这几个例子,面向对象的三属性就可以理解清楚了