当前位置: 首页 > 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.lryc.cn/news/464859.html

相关文章:

  • SSM与Springboot是什么关系? -----区别与联系
  • MATLAB小波变换图像融合系统
  • nginx-安装和80端口映射多域名和ssl
  • SVN小乌龟 create patch 和 apply patch 功能
  • #MySQL `SELECT` 语句执行流程详解
  • docker容器运行一段时间提示Failed to initialize NVML: Unknown Error
  • PPT自动化:快速更换PPT图片(如何保留原图片样式等参数更换图片)
  • 秒懂MVC, MVP, MVVM框架
  • IDEA社区版如何用tomcat运行war包
  • 如何使用 Git Cherry-Pick 和 Reset 处理误提交,并确保安全回滚
  • Goland 搭建Gin脚手架
  • Java Spring的高级装配
  • 分布式光伏发电系统电气一次部分设计(开题报告2)
  • 【设计模式-迪米特法则】
  • Webpack安装
  • 前端开发学习(一)VUE框架概述
  • Linux操作系统的背景、发展历程及对比分析
  • gaussdb 基础管理 数据库 表 用户 模式 权限 存储过程
  • i9-11900H+3070laptop+win10下的yolov5配置
  • SpringBoot日常:封装redission starter组件
  • 腾讯云技术深度解析:构建高效云原生应用与数据安全管理
  • ACM与蓝桥杯竞赛指南 基本输入输出格式二
  • 解决SolidWorks装配体无法更改透明度问题
  • 2024_newstar_week1_crypto
  • 6.2 URDF集成Rviz基本流程
  • 双系统一体机电脑无法启动报错“Something has gone serously wrong: SBAT self-check failed: Security Policy Violation”
  • 八股面试2(自用)
  • Leetcode 347 Top K Frequent Elements
  • [Linux网络编程]03-TCP协议
  • Windows和Linux在客户端/服务端在安全攻防方面的区别