[每周一更]-(第55期):Go的interface

参考地址

介绍下Go的interface

在Go语言中,interface是一种特殊的数据类型,用于定义一组方法的规范。它描述了一个对象可以具备的行为,而无需指定具体的数据类型。通过interface,可以实现多态性,使得不同类型的对象可以被看作具有相同的行为,从而增强了代码的灵活性和可复用性。

Go的interface由一组方法签名组成,没有具体的实现代码。任何类型只要实现了interface中定义的所有方法,就被认为是实现了该interface。这种实现方式是隐式的,不需要显式地声明类似"implements"关键字。只要方法签名一致,Go会自动判断类型是否实现了interface。

注意事项:

  • 接口是一种抽象类型,不能实例化。只能通过具体类型实现该接口,并将对象赋值给接口类型的变量。
  • 实现接口的类型不需要显式声明实现了某个接口,只要实现了接口中定义的所有方法,就默认实现了该接口。
  • 一个类型可以实现多个接口,只要它实现了每个接口中定义的所有方法。

Go语言的interface机制让代码更加灵活和通用。通过接口,可以定义通用的方法规范,让不同的数据类型都能适用这些方法。这为Go语言的多态性提供了基础,也使得Go代码更易于维护和扩展。

在我搭建的公司开源基于Gin框架的库中,也采用了interface的方式,通过引用该方式,增加了代码的扩展性;

示例

复制代码
// 定义一个接口
type Shape interface {
    Area() float64
    Perimeter() float64
}

// 实现接口的结构体
type Rectangle struct {
    width, height float64
}

func (r Rectangle) Area() float64 {
    return r.width * r.height
}

func (r Rectangle) Perimeter() float64 {
    return 2 * (r.width + r.height)
}

func main() {
    // 声明接口类型的变量
    var s Shape

    // 创建一个Rectangle对象,并赋值给接口变量
    rect := Rectangle{width: 5, height: 3}
    s = rect

    // 调用接口方法,实际上会调用Rectangle的方法
    fmt.Println("Area:", s.Area())
    fmt.Println("Perimeter:", s.Perimeter())
}
相关推荐
Lost of 程序猿1 分钟前
ASP.NET Core Saga 分布式事务深度实战:备件采购跨服务长流程,如何保证“要么全成,要么全回“
分布式·后端·asp.net
zzzll11112 分钟前
LangChain4j:Java 生态的 AI 应用开发利器
java·开发语言·人工智能
2601_9620710014 分钟前
【Java EE】SpringBoot的创建与简单使用
spring boot·后端·java-ee
JAI科研20 分钟前
Deepseek Agent Harness教程(七) | Deepseek Harness不是一个内核加一堆插件
开发语言·人工智能·深度学习·算法·自然语言处理·transformer·vllm
摇滚侠32 分钟前
《SpringBoot 3:入门与应用实战》第 9 章 使用 WebMvc 开发进阶 阅读笔记 24
spring boot·笔记·后端
「、皓子~44 分钟前
海狸IM 2.1 正式发布
flutter·微服务·golang·electron·开源软件·im·海狸im
元界metalite1 小时前
SpringBoot开发企业后台-操作日志记录的最佳实践
后端
用户298698530141 小时前
PDF 转纯文本(TXT)免费攻略:轻松提取文字内容
人工智能·后端·c#
程序边界1 小时前
从RAG落地到MCP实战:向量数据库融合架构的工程化体验
后端
孙克旭_1 小时前
单链表进阶实操:5 道常考面试题详细解析【Java 实现】
java·开发语言·数据结构·单链表