登录
首页 >  Golang >  Go问答

能够绕过中间接口吗?

来源:stackoverflow

时间:2024-02-27 08:36:24 255浏览 收藏

亲爱的编程学习爱好者,如果你点开了这篇文章,说明你对《能够绕过中间接口吗?》很感兴趣。本篇文章就来给大家详细解析一下,主要介绍一下,希望所有认真读完的童鞋们,都有实质性的提高。

问题内容

我正在尝试查看 Go 是否支持我在其他 OO 语言(例如 Java)中使用的语言功能。我想定义一些接口并将支持其中一些接口的对象作为参数传递给函数。

在 Java 中,我可能会定义一堆单一方法接口,如 HasAdd、HadMul、HasSub、HasDiv、HasSin、HasCos、HasTan 等。

然后我可以定义一个通用方法,其参数 T 定义为 。我将 T 传递给该方法。注意我不必定义包含 HasSin 和 HasAdd 的中间接口。 (这很好,因为 n 个接口导致需要 2^n 个中间接口来覆盖所有情况)。

我知道go不支持泛型。但它可以做类似 func(HasSin & HasAdd obj) 的事情吗?看来应该支持这种行为。我只是还没有找到可以解决这一问题的文档。

我已经看到了:https://golangbot.com/interfaces-part-2/,其中在文章底部附近有一个类似的示例,但它确实使用了中间接口。


解决方案


声明一个带有函数所需方法的接口:

type sinadder interface {
    sin(float64) float64
    add(float64, float64) float64
}

如果您声明了单一方法接口 sineradder,那么您可以根据这些接口声明 sinadder

type sinadder interface {
    siner
    adder
}

在函数中使用该接口:

func example(arg sinadder) {
}

任何具有 sin 和 add 方法的值都可以传递给示例。

您可以通过在函数参数中使用匿名接口定义来取消声明 sinadder 接口:

func example(arg interface { Siner; Adder }) {
}

今天关于《能够绕过中间接口吗?》的内容就介绍到这里了,是不是学起来一目了然!想要了解更多关于的内容请关注golang学习网公众号!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>