Go 是面向对象编程风格的编程语言吗?

Go编程时光

零基础 Go入门教程连载中...
43篇原创内容
公众号

01

介绍

Golang 语言是面向对象语言吗?Golang 语言官方的回答是 Yes and no。什么意思呢?Golang 语言是面向对象语言,Golang 语言也不是面向对象语言。

虽然 Golang 语言有类(struct)和方法(method),支持面向对象的编程风格,我们可以使用 Golang 语言的 struct 实现面向对象的封装特性,但是 Golang 语言没有面向对象的继承特性,Golang 语言可以使用组合实现“继承”。

Golang 语言中的 interface 也和其他语言中的接口实现方式不同,Golang 语言中的接口实现方式是鸭子类型(duck type)。

封装,继承和多态是区分编程语言是否是面向对象编程语言的三个重要特性。本文我们通过一些简单易懂的示例代码介绍一下 Golang 语言的面向对象编程风格。

02

封装

面向对象的封装特性,其他面向对象语言是使用 class 定义一个类,然后在类中定义属性和方法。在 Golang 语言中,没有类 class 的概念,它是使用结构体 struct 替代类 class,struct 中可以包含零个或多个变量,然后可以使用 method 和 struct 绑定实现方法,用来替代其他语言中 class 中的属性和方法。

关于 method 绑定的 struct(接收者)是值类型和指针类型之间的区别,我们在之前的文章中介绍过,在此不再赘述。

type Employee struct {
 Name string
 Gender string
 Age uint8
 Salary uint
}

func (e Employee) Information () string {
 return fmt.Sprintf('Name:%s Gender:%s Age:%d Salary:%d', e.Name, e.Gender, e.Age, e.Salary)
}

阅读上面这段代码,我们定义了一个命名是 Employee 的 struct,包含 4 个成员变量,并且定义一个 Information 方法,绑定到命名是 Employee 的 struct 上。

03

继承 组合

面向对象的继承特性,在 Golang 语言中并不支持,但是可以使用组合的方式实现“继承”。

type User struct { ID uint64 Name string Score uint64}

type Member struct { User Level uint8}

func (u User) Information () string { return fmt.Sprintf('ID:%d Name:%s Score:%d', u.ID, u.Name, u.Score)}

阅读上面这段代码,我们定义了一个命名为 User 的 struct,它包含 3 个成员变量,然后定一个一个命名为 Member 的 struct,它包含 2 个成员变量,其中一个成员变量是嵌入的 User,通过组合的方式,类型 Member 就“继承”了类型 User 的属性(成员变量)和方法。

04

多态

Golang 语言中也有接口 interface,它的 interface 的实现方式是 duck type,它不需要像其他面向对象编程语言那样,使用关键字 implements 显式声明,而是只需要类型通过实现接口中的所有方法来实现接口。

type MemberRights interface {
 Information () string
}

type BronzeMember struct {
 Discount uint8
}

type SilverMember struct {
 Discount uint8
}

type GoldMember struct {
 Discount uint8
}

func (b *BronzeMember) Information () string {
 return fmt.Sprintf('Discount:%d', b.Discount)
}

func (s *SilverMember) Information () string {
 return fmt.Sprintf('Discount:%d', s.Discount)
}

func (g *GoldMember) Information () string {
 return fmt.Sprintf('Discount:%d', g.Discount)
}

func Price (m MemberRights) {
 fmt.Println(m.Information())
}

func main () {
 b := &BronzeMember{Discount: 9}
 Price(b)
 s := &SilverMember{8}
 Price(s)
 g := new(GoldMember)
 g.Discount = 7
 Price(g)
}

阅读上面这段代码,我们定义一个命名为 MemberRights 的接口,包含一个方法 Information () string,然后定义了三个 struct,命名分别是 BronzeMember,SilverMember 和 GoldMember,并且实现了 Information () string 方法。

我们还定义了一个函数 Price,接收一个 MemberRights 接口类型的参数。我们在 main 函数中调用 Price 函数,并分别传入我们定义的三个实现了 MemberRights 接口包含的方法 Information () string 的变量作为 Price 函数的参数。因为 Price 函数的参数是接口类型,所以我们需要传入指针类型的变量,我们还特意通过三种不同的方式声明指针类型的变量。

05

总结

本文我们介绍了 Golang 语言是否是面向对象编程风格的语言,并给出了 Golang 语言官方的回答和解释。然后使用示例代码介绍了 Golang 语言的面向对象编程风格。

需要注意的是 Golang 语言中使用命名首字母大小写区分私有和公有,私有和公有属性在 Golang 语言中也叫可导出和非可导出。

(0)

相关推荐

  • Python属于什么语言?0基础必看!

    关于Python是什么类型的语言,很多人都搞不清楚,有的人说它是开源的编程语言,也有的人说它是面向对象的编程语言,接下来小编通过这篇文章为大家解答一下. 先来了解一下Python.Python是FLO ...

  • Python是什么?Python入门!

    现如今,Python已经成为当下非常热门的编程语言,反超众多编程语言前辈,位居四大编程语言之一,可以应用在众多领域,因此越来越多的人都加入到Python学习大军,那么Python是什么?为什么Pyth ...

  • Python教程:面向对象编程的一些知识点总结

    类与实例 类是对象的定义,而实例是"真正的实物",它存放了类中所定义的对象的具体信息. 类.属性和方法命名规范 类名通常由大写字母打头.这是标准惯例,可以帮助你识别类,特别是在实例 ...

  • 面向对象编程(中)

    继承性(inheritance) 多个类中存在相同属性和行为时,将这些内容抽取到单独一个类 中, 那么多个类无需再定义这些属性和行为,只要继承那个类即可 多个类称为子类(派生类),单独的这个类称为父类 ...

  • java 面向对象编程

    什么是面向对象 回顾方法的定义与调用 方法的定义 import java.io.IOException; //Demo01 类 public class Demo01 { //main方法 publi ...

  • Python 面向对象编程(一)

    虽然Python是解释性语言,但是它是面向对象的,能够进行对象编程.下面就来了解一下如何在Python中进行对象编程. 一.如何定义一个类 在进行python面向对象编程之前,先来了解几个术语:类,类 ...

  • Python面向对象编程(二)

    在前面一篇文章中谈到了类的基本定义和使用方法,这只体现了面向对象编程的三大特点之一:封装.下面就来了解一下另外两大特征:继承和多态. 在Python中,如果需要的话,可以让一个类去继承一个类,被继承的 ...

  • 面向对象编程(二)

    使用__slots__ 正常情况下,当我们定义了一个class,创建了一个class的实例后,我们可以给该实例绑定任何属性和方法,这就是动态语言的灵活性.先定义class: class Student ...

  • Python 面向对象编程的核心概念知识点简介

    本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理. 以下文章来源于 无量测试之道 ,作者: 无量测试之道 面向对象编程的核心概念:封装,抽象,多态.继 ...

  • 高级篇||PLC的面向对象编程

    面向对象编程是计算机高级语言的一种先进的编程模式,在工业控制系统的PLC程序中也可以采用这种设计思想,虽然我们无法实现面向对象的很多优秀特点如"继承",甚至于它根本就不具备面向对象 ...

  • 走进面向对象编程的世界

    InfoQ2021-03-06 15:37:00 面向对象编程(Object-Oriented Programming,OOP)是一种编程范式或编程方式,它使用类和对象来解决问题. 类只是定义任何有形 ...