是否可以在golang中同时指定带变量和接口的结构?

时间:2015-07-15 23:17:36

标签: object inheritance struct go

我正在努力清理一些golang代码。该代码处理许多以类似方式运行并共享一些类似数据字段的结构。我想知道是否可以同时指定一个通用的结构和接口?类似的东西:

type Foo struct {
    Bar string
    BarTheFoo() string
}

func (f Foo)FooBar() string {
    BarTheFoo()
    return f.Bar
}

意味着从Foo继承的任何其他结构都会包含Bar变量,但它也应该实现自己的BarTheFoo()函数。知道所有的Foo衍生物都有BarTheFoo(),我想在一个我知道每个Foo衍生物看起来都相同的函数中使用它。

这样的事情可以在Go吗?

1 个答案:

答案 0 :(得分:1)

是的,但为了充分理解它,我认为你需要偏离那些继承的概念,因为它们在Go中不存在。您可以做的最近的事情是“嵌入”Bar所有类型(包括Foo)。

此功能有点像继承和组合的混合。虽然Foo类型在技术上将由Bar类型(以及其他字段)组成,但Bar类型上的方法在某种意义上是提升的,因此可以直接调用它们来自Foo。它看起来像这样;

type Foo struct {
    Bar
}

type Bar struct {
    // pretend this type is useful
}

func (b Bar)FooBar() string {
    // pretend this is useful
    return b.ThatProperty
}

然后在其他情况下你可以做;

f := &Foo{}
f.Bar()

我不确定这究竟是你想要做什么,我可以编辑更多的指导,但我不能专门回答你的问题,因为你所问的内容在Go中不存在。