初学是真麻烦,可能是我上来入手python,太简单了

GO是面向接口编程

  1. 接口定义: 接口是一组方法的集合,用于描述对象应该具有的行为。接口定义了一个协议,规定了实现该接口的类型必须提供哪些方法。在面向接口编程中,关注的是对象的行为而不是具体的类型。

  2. 接口实现: 类型通过实现接口的方式表达其符合该接口的行为要求。一个类型可以实现一个或多个接口,只要它提供了接口中定义的所有方法。

  3. 接口使用: 在代码中,通过接口类型的变量或者接口类型的参数,可以接收实现了该接口的任何具体类型。这样的设计使得代码更加灵活,可以轻松替换不同实现而不影响调用方。

面向接口和面向对象的区别

Go语言中,并没有像其他面向对象语言(如Java或C++)那样的类的概念。在Go中,我们不使用类,而是直接创建结构体(struct)的实例,这些实例就是对象。然后通过函数实现行为。

Go语言没有继承,定义好接口之后,实现多个行为。

有些区别,但是不是很大

相同点

  1. 抽象: 两者都强调对问题领域的抽象,通过定义抽象数据类型(类、接口)来建模和组织代码。这种抽象能力使得开发者能够更好地理解和处理现实世界的问题。

  2. 封装: 面向对象编程和面向接口编程都支持封装的概念。封装将对象的内部实现细节隐藏起来,只暴露必要的接口或方法,从而提高代码的可维护性和可理解性。

  3. 复用: 两者都支持代码的复用。在面向对象编程中,复用通过继承和多态性来实现;而在面向接口编程中,复用通过接口的实现来实现。通过这两种方式,可以减少代码的重复性,提高开发效率。

  4. 模块化: 面向对象编程和面向接口编程都鼓励模块化设计。将系统划分为相对独立的对象或接口,每个模块负责特定的任务或功能,使得代码更易于维护和扩展。

  5. 多态: 两者都支持多态性。在面向对象编程中,多态通过继承和方法的重写来实现;而在面向接口编程中,多态通过实现相同接口的不同类型来实现。这种多态性使得代码更加灵活,能够处理不同类型的对象

不同点

  go:没有传统的类和对象的概念,因此没有直接的实例化对象的说法(结构体就是对象)。Go通过结构体(struct)来组织数据,而不是通过类来定义对象。结构体含数据字段(类似于对象的属性),func中实现方法(类似对象的方法)

  • 例子: 假设有一个接口 Swimmer,任何实现了这个接口的对象都可以被认为是游泳者,不论是鱼、鸭子还是人类。
  • 例子: 有一个类 Dog,它有属性(比如颜色)和方法(比如吠叫)。类可以被继承,比如创建一个类 GoldenRetriever,它继承了 Dog 并可能有一些额外的方法和属性。

 

接口

接口提供了一种实现多态性的方式,使得可以通过接口来编写通用的代码,而不依赖于具体的类型。

虽然Java和Go都有接口和多态的概念,但它们的实现和使用方式有所不同,。

优点:

 

实现接口方法(区别函数):

func (receivername ReceiverType) MethodName() {
    // 方法体
}
func (接收者名字,接收者类型) 接口名字() {
    // 方法体
}
func (自己起,结构体名字) 接口名字() {
    // 方法体
}

 

案例

package main

import "fmt"

// 定义一个接口
type Swimmer interface {
Swim()
}

// 定义一个结构体
type Fish struct{}

// 实现接口方法(结构体名字和结构体)
func (f Fish) Swim() {
fmt.Println("Fish is swimming")
}

// 使用接口的函数(接口的名字和接口)。传入的类型是接口,实际上是结构体的实例。即可以传递任何满足 Swimmer 接口的具体类型的实例
func MakeItSwim(s Swimmer) {
s.Swim() //调用接口的名字,即调用接口的方法
}
func main() {
// 创建结构体的实例,类似创建一个对象
fish := Fish{}
// 将结构体传入调用的函数,。
MakeItSwim(fish)
}

  

案例

package main

import "fmt"

// 定义接口
type Shape interface {
Area() float64
}

// 定义结构体(类型)- 圆形
type Circle struct {
Radius float64
}
// 实现接口方法 - 圆形
func (c Circle) Area() float64 {
return 3.14 * c.Radius * c.Radius
}

// 定义结构体(类型)- 正方形
type Square struct {
SideLength float64
}
// 实现接口方法 - 正方形
func (s Square) Area() float64 {
return s.SideLength * s.SideLength
}

func main() {
// 创建一个 Circle 类型的变量
circle := Circle{Radius: 2.5}
// 调用接口方法
area := circle.Area()
fmt.Println("圆的面积是:", area)

// 创建一个 Square 类型的变量
square := Square{SideLength: 3.0}
area = square.Area()
fmt.Println("正方形的面积是:", area)
}

  

posted on 2023-12-15 14:58  黑逍逍  阅读(5)  评论(0编辑  收藏  举报