Go 语言面向对象编程系列教程(十) —— 接口篇:空接口及其使用场景

熟悉 Java 的同学应该都知道,在这个号称血统最纯正的面向对象编程语言中,「万事万物皆对象」,并且所有类都继承自祖宗类「Object」,所以 Object 类型变量可以指向任何类的实例。 Go 语言打破了传统面向对象编程中类与类之间继承的概念,而是通过组合实现方法和属性的重用,所以不存在类似的继承关系树,也就没有所谓的祖宗类,而且类与接口之间也不再通过 implements 关键字强制...

Go 语言面向对象编程系列教程(七) —— 接口篇:通过接口赋值实现接口与实现类的映射

上篇教程我们介绍了接口定义及实现,和 PHP 一样,Go 语言的接口不支持直接实例化,只能通过实现类实现接口声明的所有方法,不过不同之处在于 Go 语言接口支持赋值操作,从而快速实现接口与实现类的映射,与之相比,PHP 要实现接口与实现类的映射,只能基于 IoC 容器通过依赖注入实现,就像 Laravel 框架底层服务容器所做的那样,要复杂的多。 接口赋值在 Go 语言中分为如下两种情况...

Go 语言面向对象编程系列教程(六) —— 接口篇:接口定义与实现

接口在 Go 语言中有着至关重要的地位,如果说 goroutine 和 channel 是支撑起 Go 语言并发模型的基石,那么接口就是 Go 语言整个类型系统的基石。Go 语言的接口不单单只是接口,下面就让我们一步步来探索 Go 语言的接口特性。 PHP 的接口实现 和类的实现相似,Go 语言的接口和其他语言中提供的接口概念完全不同。以 PHP 为例,接口主要作为不同类之间的契约存在,...

Go 语言面向对象编程系列教程(五) —— 类属性和方法的可见性

前面我们已经陆续介绍了 Go 语言中面向对象的基本特性,包括自定义类的实现、构造函数、成员方法、类的继承、方法重写等,今天我们来系统介绍下类的属性和成员方法的可见性。 在 Go 语言中,没有类似 PHP 和 Java 那种命名空间的概念,不过 Go 语言也是通过包来管理源代码的,包往往与文件系统的目录结构存在映射关系,Go 语言在寻找变量、函数、类属性及方法的时候,会先查看 GOPATH...

Go 语言面向对象编程系列教程(四) —— 通过组合实现类的继承和方法重写

Go 语言不是像 PHP 等传统面向编程实现那样通过 extends 关键字来显式定义子类与父类之间的继承关系,而是通过组合方式实现类似功能,显式定义继承关系的弊端有两个:一个是导致类的层级复杂,另一个是影响了类的扩展性,设计模式里面推荐的也是通过组合来替代继承提高类的扩展性。 我们来看一个例子,现在有一个父类 Animal,有一个属性 name 用于表示名称,和三个成员方法,分别用来获...

Go 语言面向对象编程系列教程(三) —— 为基本数据类型添加成员方法

在 Go 语言中,你可以给任意类型(包括基本类型,但不包括指针类型)添加成员方法,但是如果是基本类型的话,需要借助 type 关键字对类型进行再定义,例如: type Integer int func (a Integer) Equal(b Integer) bool { return a == b } 注意,这个时候 Integer 已经是一个新的类型了,这与 type I...

Go 语言面向对象编程系列教程(二) —— 类的定义、初始化和成员方法

上篇教程我们简单给大家介绍了 Go 语言的类型系统,关于基础类型、复合类型以及值语义和引用语义我们前 面在数据类型系列里面已经基本都介绍过了,接下来,我们就与 Go 语言面向对象编程相关的特性展开介绍。 类的定义和初始化 Go 语言的面向对象编程与我们之前所熟悉的 PHP、Java 那一套完全不同,没有 class、extends、implements 之类的关键字和相应的概念,而是借助...

Go 语言面向对象编程系列教程(一) —— 类型系统概述

对于面向对象编程的支持,Go 语言的实现可以说是完全颠覆了以往我们对面向对象编程的认知,下面我们先通过对 Go 语言类型系统的介绍让你有一个整体的认知。 Go 语言面向对象编程设计得简洁而优雅。 简洁之处在于,Go 语言并没有沿袭传统面向对象编程中的诸多概念,比如类的继承、接口的实现、构造函数和析构函数、隐藏的 this 指针等,也没有 public、protected、private ...