如何定义和实现Go接口

Go的面向对象模型围绕接口。 我个人认为接口是最重要的语言构造,所有设计决策都应首先关注接口。

在本教程中,您将学习接口是什么,Go对接口的理解,如何在Go中实现接口以及最后接口与合同的局限性。

什么是Go接口?

Go接口是一种类型,它由方法签名的集合组成。 这是Go接口的示例:

type Serializable interface {
    Serialize() (string, error)
	Deserialize(s string) error
}

Serializable接口有两种方法。 Serialize()方法不接受任何参数,并返回一个字符串和一个错误,而Deserialize()方法接受一个字符串,并返回一个错误。 如果您遍历该块,那么其他语言可能会让您熟悉Serializable接口,并且您可以猜测Serialize()方法返回目标对象的序列化版本,可以通过调用Deserialize()并传递来重建该对象最初调用Serialize()

请注意,您无需在每个方法声明的开头提供“ func”关键字。 Go已经知道接口只能包含方法,并且不需要任何帮助,只要您说它是“函数”即可。

Go界面最佳做法

Go接口是构建程序主干的最佳方法。 对象应该通过接口而不是通过具体对象相互交互。 这意味着您应该为程序构造一个仅由接口和基本类型或数据对象(其成员为基本类型或其他数据对象的结构)组成的对象模型。 以下是您应该使用界面进行的一些最佳实践。

明确意图

重要的是,对于调用者和实现者而言,每种方法和调用顺序背后的意图必须清晰且定义明确。 Go对此没有语言级别的支持。 稍后,我将在“接口与合同”部分中对其进行更多讨论。

依赖注入

依赖注入意味着通过接口与另一个对象交互的对象将从外部获得该接口作为函数或方法参数,并且不会创建该对象(或调用返回具体对象的函数)。 请注意,该原理也适用于独立功能,而不仅适用于对象。 函数应将其所有依赖项作为接口接收。 例如:

type SomeInterface {
    DoSomethingAesome()
}

func foo(s SomeInterface) {
 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值