初学是真麻烦,可能是我上来入手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都有接口和多态的概念,但它们的实现和使用方式有所不同,。

优点:

 

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

1
2
3
4
5
6
7
func (receivername ReceiverType) MethodName() {
    // 方法体
}func (接收者名字,接收者类型) 接口名字() {
    // 方法体
}func (自己起,结构体名字) 接口名字() {
    // 方法体
}

 

案例

1
package main<br><br>import "fmt"<br><br>// 定义一个接口<br>type Swimmer interface {<br>    Swim()<br>}<br><br>// 定义一个结构体<br>type Fish struct{}<br><br>// 实现接口方法(结构体名字和结构体)<br>func (f Fish) Swim() {<br>    fmt.Println("Fish is swimming")<br>}<br><br>// 使用接口的函数(接口的名字和接口)。传入的类型是接口,实际上是结构体的实例。即可以传递任何满足 Swimmer 接口的具体类型的实例<br>func MakeItSwim(s Swimmer) {<br>    s.Swim() //调用接口的名字,即调用接口的方法<br>}<br>func main() {<br>    // 创建结构体的实例,类似创建一个对象<br>    fish := Fish{}<br>    // 将结构体传入调用的函数,。<br>    MakeItSwim(fish)<br>}

  

案例

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   黑逍逍  阅读(17)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!



点击右上角即可分享
微信分享提示