当前位置: 首页 > news >正文

# Go 语言中的 Interface 和 Struct


```go
package mainimport ("fmt"
)// Girl 是一个接口,定义了所有"女性"类型都应该实现的方法
type Girl interface {call()introduce()
}// Wife 结构体代表妻子
type wife struct {name       stringage        intyearsWed   int
}// call 方法的 wife 实现
func (w wife) call() {fmt.Println("I am wife, I can call you!")
}// introduce 方法的 wife 实现
func (w wife) introduce() {fmt.Printf("Hello, I'm %s, %d years old, and we've been married for %d years.\n", w.name, w.age, w.yearsWed)
}// Girlfriend 结构体代表女朋友
type girlfriend struct {name           stringage            intmonthsDating   int
}// call 方法的 girlfriend 实现
func (g girlfriend) call() {fmt.Println("I am girlfriend, I can call you!")
}// introduce 方法的 girlfriend 实现
func (g girlfriend) introduce() {fmt.Printf("Hi, I'm %s, %d years old, and we've been dating for %d months.\n", g.name, g.age, g.monthsDating)
}func main() {// 声明一个 Girl 接口类型的变量var partner Girl// 创建一个 wife 实例并赋值给 partnerpartner = wife{name: "Alice", age: 30, yearsWed: 5}// 调用 wife 的方法partner.call()partner.introduce()// 创建一个 girlfriend 实例并赋值给 partnerpartner = girlfriend{name: "Bob", age: 25, monthsDating: 6}// 调用 girlfriend 的方法partner.call()partner.introduce()
}

返回结果:
I am wife, I can call you!
Hello, I’m Alice, 30 years old, and we’ve been married for 5 years.
I am girlfriend, I can call you!
Hi, I’m Bob, 25 years old, and we’ve been dating for 6 months.

Go 语言中的 Interface 和 Struct

引言

Go 语言以其简洁而强大的特性而闻名,其中 interface 和 struct 是两个核心概念。本文将通过一个简单的例子来解释这两个概念的使用和重要性。

Struct(结构体)

定义和用途

在 Go 中,struct 用于创建自定义类型,类似于其他语言中的类。

示例代码

type wife struct {// 这里可以添加 wife 的特定属性
}type girlfriend struct {// 这里可以添加 girlfriend 的特定属性
}

解释

  • wifegirlfriend 是两个不同的 struct。
  • 它们可以包含各自的属性,尽管在这个例子中没有定义具体的属性。

Interface(接口)

定义和用途

Interface 在 Go 中定义了一组方法签名,任何类型只要实现了这些方法,就被认为实现了该接口。

示例代码

type Wife interface {call()
}

解释

  • Wife 接口定义了一个 call() 方法。
  • 任何实现了 call() 方法的类型都被视为实现了 Wife 接口。

方法实现

为 Struct 实现方法

在 Go 中,我们可以为 struct 定义方法,使其实现接口。

示例代码

func (w wife) call() {fmt.Println("I am wife, I can call you!")
}func (g girlfriend) call() {fmt.Println("I am girlfriend, I can call you!")
}

解释

  • 这两个方法使 wifegirlfriend 结构体都实现了 Wife 接口。
  • 每个结构体有自己的 call() 方法实现。

多态性

使用接口实现多态

Go 通过接口实现多态,允许不同类型的对象对同一消息做出响应。

示例代码

func main() {var partner Wifepartner = new(wife)partner.call()partner = new(girlfriend)partner.call()
}

解释

  • partner 变量的类型是 Wife 接口。
  • 它可以存储任何实现了 Wife 接口的类型的值。
  • 根据 partner 实际引用的对象,call() 方法会有不同的行为。

总结

通过这个简单的例子,我们可以看到:

  1. Struct 用于定义自定义类型。
  2. Interface 定义了一组方法签名。
  3. 通过为 struct 实现方法,可以使其满足接口的要求。
  4. 接口允许不同类型的对象以多态的方式被处理。

这种设计使得 Go 语言在保持简洁的同时,提供了强大的面向对象编程能力。


http://www.mrgr.cn/news/54374.html

相关文章:

  • Vue 3集成海康Web插件实现视频监控
  • GRPC 压缩算法
  • 单例设计模式(Singleton Pattern)
  • 浅谈数据库选型
  • Unity3D 游戏框架设计二进制序列化器详解
  • Yolo目标检测:Yolo v1简介
  • 在线图片翻译有哪些?快速识别并翻译图中文字就用它
  • 字节回应实习生破坏大模型训练:确有此事 但部分报道夸大失实
  • C# Linq常用方法
  • Django 测试指南
  • NVIDIA cuDNN
  • SpringCloud学习:Seata总结与回顾
  • Qt开发技巧(十七):新窗口控件用智能指针,将一些配置类变量封装起来,Qt窗体的Z序叠放,子窗体的释放,Qt中的事件发送,Qt的全局头文件
  • 二、见招拆招:ShardingJDBC分库分表实战指南
  • springboot物流网站-计算机毕业设计源码90281
  • AI 通俗理解强人工智能和弱人工智能
  • 数据结构8—树(链式存储二叉树)
  • 组流技术与流特征分析
  • 软考(网工)——网络规划设计
  • ICM20948 DMP代码详解(90)
  • 什么是 Idempotence 以及它在哪里使用?
  • Windows 11开发环境搭建与应用开发实践
  • lesson01 Backtrader是什么
  • Rust虚拟机Demo
  • Vue基础(四)
  • 树莓派设置中文界面