从go语言理解为什么不用类也可以实现面向对象?

带有class关键字语言中的面向对象

先看看常见的面向对象语言中是怎么处理的

  • 抽象
  • 封装
  • 继承
  • 多态

这四个是面向对象的四个基本特征

  1. 抽象, 就是将某一类事务的特征进行提取的过程
  2. 封装, 将抽象出来的东西, 用一个类进行存储
  3. 继承, 类与类之间可以实现继承关系, 子类将获得父类公有的属性和方法
  4. 多态, 一个类的中的某个成员函数, 可以对不同的参数执行不同的行为

比如下面这个例子, 就是对属性和行为的封装, age 属于属性, run 属于行为

class human{
	public int age;
	public void run(){
		
	}
}

下面这个则是实现了继承(实现的前提是这两个类在现实生活中有可提供依据的从属关系), man 具有 human 中的所有特征,所以, 可以实现继承关系, man 也自然获得了 human 中的 age 属性和 run 这个行为

class man extends human{
	public void stronger(){
		
	}
}

多态则可这样实现, 标准步骤为:

  1. 接口中写入抽象方法
  2. 父类实现接口并实现抽象法法
  3. 子类继承父类
  4. 重写父类中的抽象方法

然后根据输入参数的不同, 在函数内实现相应的功能即可, 在这里重写的是 run , 因为可以根据年龄段的不同, 决定这个人跑的速度有多快, 所以, 这个也是符合现实中的规则的

class man extends human{
	public void stronger(){
		
	}
	@Override
	public void run(int ages){
		
	}
	
}

如果没有 class 关键字了, 该怎么办?

实际上,没有 class 关键字也能实现上述 Java 中面向对象的一系列形式, 一开始可能觉得不可思议, 但是理解之后肯定会和李云龙一样惊叹一句:你TND还真是个天才

go语言中就没有这个 class 关键字, 也没有类这个概念

但是在 go 语言中, 提供了类似 C 语言结构体一样的东西, 而且, go 语言中函数的定义也是有点奇特

这是 go 语言中结构体的定义

在这里插入图片描述

结构体是用于存储多个变量的, 把他们组合在一起, 那么, 类中的变量(属性)是不是可以用结构体存储呢?
而且, 一个结构体都有独一无二的名字, 是不是就能代表类名了呢?

这是 go 语言中普通函数的定义
普通函数

再来看看函数, 普通函数和其他语言差距不大, 但是成员函数(方法)却不一样了

这是 go 语言中成员函数(方法)的定义
在这里插入图片描述

与普通函数不一样的是, 函数名前面多了一个参数, 而且是唯一的, 是一个叫做接收者的参数, 这个说白了, 就相当于前面提到的结构体的一个引用, 这不就可以用来辨别这个函数是属于哪个结构体(类)了

继承又该怎么实现呢?

结构体嵌套就完事了

这是 go 语言中接口的定义
在这里插入图片描述

接口用法就和 Java 中的差不多了, 里面都是抽象函数, 通常用于实现多态

但是 golang 中有个习惯上的约定, 一个接口在绝大多数情况下, 只有一个抽象方法, 这个和 Java 不一样

面向对象只是一个思想, 并不和 class 关键字绑定

面向对象是一种编程思想, 并不和 class 这种关键字画等号, go 语言中没有class 关键字都可以实现面向对象的这些东西, 所以, 只凭借有没有 class 关键字就判定一门语言是不是面向对象的语言, 相反, C 语言也能实现上面这些, C++ 在刚出来的时候, 都是先翻译成 C 语言代码, 然后进行编译的, 可是 C 语言却是面向过程的语言。 在理解 go 语言这个设计技巧之后, 对于 C++ 翻译成 C 语言再进行编译的过程我也理解更多了, 其实他们两个处理面向对象这些元素的方法很相似。

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: 在 Go 语言中,struct 结构是用来定义一组字段(field)的数据型。它可以用来表示一组有相关性的数据,例如一个人的信息,可以用一个 struct 型来表示,其中包含字段有名字、年龄、性别等。 使用 struct 结构可以使代码更加清晰易懂,因为它把一组相关的数据和它们之间的关系放在了一起,而不是分散在不同的变量里。这样可以使代码更容易维护和理解。 另外,struct结构支持方法(method),可以给一个结构体型添加方法。使用这些方法可以更好的描述结构体型的行为。 总之,struct 结构在 Go 语言中是非常重要的,它可以帮助我们更好的组织数据和行为,让代码更加清晰易懂。 ### 回答2: Go语言需要struct结构是为了构建和组织数据。struct结构是一种自定义的数据型,它能够将多个不同型的变量组合成为一个更复杂的数据结构。 首先,struct结构提供了一种有效的方式来组织相关的数据。在实际开发中,经常会遇到需要同时操作多个相关联的变量的情况。通过使用struct结构,我们可以将这些变量打包成一个整体,便于一次性处理和传递。这有助于提高代码的可读性和维护性,减少错误发生的可能性。 其次,struct结构允许我们自定义和扩展数据型。在Go语言中,struct结构可以包含不同型的字段,包括基本型(如整数、字符串等)和其他自定义的struct结构。这使得我们能够根据实际需求创建出更复杂的数据结构,提供更丰富的功能和灵活的使用方式。 此外,struct结构还支持面向对象的概念和特性,如封装、继承和多态。通过在struct结构中定义方法,我们可以将相关的操作和数据绑定到一起,实现更高级的功能和面向对象的设计模式。这对于构建大型和复杂的应用程序非常有用,能够提供更好的可扩展性和可维护性。 总之,Go语言需要struct结构是为了更好地组织和管理数据,提供更丰富的数据型和功能,并支持面向对象的编程方式。这使得我们能够更高效地开发和维护应用程序,提高代码的可读性和可重用性。 ### 回答3: Go语言是一种面向对象的编程语言,它使用struct结构来定义自定义的数据型,以便更好地组织和管理数据。 首先,struct结构允许我们将多个不同型的数据字段封装到一个组合的数据结构中。这样可以更好地表示真实世界的复杂数据模型,例如用户、订单、商品等。通过在一个struct中定义多个不同的字段,我们可以将相关的数据聚集在一起,提高代码的可读性、可维护性和可扩展性。 其次,struct结构可以通过定义方法来实现行为。在定义一个struct时,我们可以为其关联方法,这样可以在struct内部定义一些操作和行为,使得对该struct对象的操作更加方便和直观。通过与方法一起使用,我们可以在结构体中封装数据和行为,实现面向对象编程的思想。 此外,struct结构还可以用于实现自定义的数据型。在Go语言中,预定义的基本数据型包括整数、浮点数、字符串等,而struct结构允许我们根据实际需要定义自己的数据型。我们可以通过定义struct结构来表示不同的实体或概念,例如学生、汽车等,从而更好地符合具体业务需求。 最后,Go语言的struct结构支持匿名字段的机制,这使得数据结构的使用更加灵活。通过匿名字段,我们可以在一个结构体中嵌入另一个结构体,从而实现代码的复用和组合,减少重复定义和冗余代码。 综上所述,Go语言需要struct结构来更好地管理和组织数据,实现面向对象的编程思想,实现自定义的数据型,以及支持代码的复用和组合。通过合理使用struct结构,我们可以编写出可读性强、易于维护和扩展的代码。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值