GOLANG面向对象:封装 继承 多态

        面向过程转换到面向对象,那么必然会涉及到几个特性:封装,继承,多态,那么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,其他的字段赋值了,输出的是赋予的值


那么我们换一个赋值方式:

 打印结果:

从上面的代码来看两种赋值方式都可以,其实上这是有区别的,到底是有什么区别?我们再看看新的代码:

输出结果:

分析:为什么会这个样子?实际上就是就近原则,另外还有一种情况,看下面的距离

代码段:

输出结果:

 分析:如果子级结构体集成父级结构体,子级结构体与父级结构体有相同的属性,先满足子集结构体的赋值,这也是就近原则的一种体现,并且以上例子也体现了多态,结合这几个例子,面向对象的三属性就可以理解清楚了

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值