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

go语言中interface之间嵌入与struct之间的嵌入实现多态

前言

在Go语言中,结构体(struct)之间可以相互包含,这种特性通常称为“嵌入”(embedding)。当你在一个结构体中嵌入另一个结构体时,被嵌入的结构体的字段和方法就像它们直接声明在新结构体中一样。接口可以组合其他接口,一个接口可以包含另一个或多个接口的所有方法。

一、接口interface的定义

// 基本接口
type BaseInterface interface {
    Method1()
}

// 第一个扩展接口
type Interface1 interface {
    BaseInterface
    Method2()
}

// 第二个扩展接口
type Interface2 interface {
    BaseInterface
    Method3()
}

二、struct实例化interface 

type MyStruct struct{}

func (m MyStruct) Method1() {
    fmt.Println("Base method called")
}

// 实现第一个扩展接口的结构体
type MyStruct1 struct {
    MyStruct
}

func (m MyStruct1) Method1() {
    fmt.Println("MyStruct1's Method1 called")
}

func (m MyStruct1) Method2() {
    fmt.Println("Method2 called")
}

// 实现第二个扩展接口的结构体
type MyStruct2 struct {
    MyStruct
}

func (m MyStruct2) Method1() {
    fmt.Println("MyStruct2's Method1 called")
}

func (m MyStruct2) Method3() {
    fmt.Println("Method3 called")
}

三、公共函数调用接口方法 

func commonFunction(b BaseInterface) {
    b.Method1()
}

各个struct实现了各自的Method1方法,当传入对应结构体参数时相应执行对应的函数。

四、主函数调用 

func main() {
    s1 := MyStruct1{}
    s2 := MyStruct2{}

    commonFunction(s1)
    commonFunction(s2)


http://www.kler.cn/a/376502.html

相关文章:

  • brew 下载过慢, 切换使用国内源
  • 关于安卓升级gradle8.0和jdk17的要点
  • 快消零售行业的培训创新:构建在线培训知识库
  • CPU 不执行程序的时候在干什么?
  • 信息学科平台系统开发:基于Spring Boot的最佳实践
  • KPRCB结构之ReadySummary和DispatcherReadyListHead
  • aws boto3 下载文件
  • 螺旋式开发是不是就是敏捷开发?
  • Jenkins面试整理-如何在 Jenkins 中进行并行构建?
  • 手把手写Linux第一个小程序 - 进度条(5种版本)
  • OpenSSH用户枚举漏洞修复——ubuntu升级ssh版本
  • 线程函数和线程启动的几种不同形式
  • 掌握ElasticSearch(七):相关性评分
  • Axios-Mock-Adapter mock数据
  • 《卷积、卷积操作、卷积神经网络原理探索》
  • 3. 探索 Netty 的粘包与拆包解决方案
  • ARM base instruction -- mneg
  • 正点原子阿尔法ARM开发板-IMX6ULL(十一)——IIC协议和SPI协议--AP3216C环境光传感器和ICM20608六轴传感器
  • 在Zetero中调用腾讯云API的输入密钥的问题
  • 【Linux】信号三部曲——产生、保存、处理
  • ES跟Kafka集成
  • git 切换分支
  • 一个运维牛人对运维规则的10个总结
  • 秒懂Linux之Socket编程(四)
  • 支持向量机SVM与自然语言处理基础小结
  • 2024.10.2校招 实习 内推 面经