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

标签 object inheritance struct go

我目前正在清理一些 golang 代码。该代码处理许多以相似方式运行并共享一些相似数据字段的结构。我想知道是否可以同时指定一个公共(public)结构和接口(interface)?像这样的东西:

type Foo struct {
    Bar string
    BarTheFoo() string
}

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

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

在 Go 中有这样的可能吗?

最佳答案

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

此功能有点像继承和组合的混合体。虽然 Foo 类型在技术上将由 Bar 类型(以及其他字段)“组合”,但 Bar 类型的方法在sense 提升,以便可以直接从 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 中不存在。

关于object - 是否可以在golang中同时指定带变量的结构和接口(interface)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31442849/

相关文章:

javascript - Joi 中的 array.items() 内的 object.pattern() 无法正常工作

javascript - Javascript中如何将字符串转换为对象?

java - 是否有与 java.lang.Number 等效的 C++?

c - 确定结构大小,忽略填充

c++ - C/C++ 结构与类

javascript - 从另一个对象更新 JavaScript 对象属性

c++ - 如何通过将类的对象和成员函数传递给 C++ 中的另一个函数来调用类?

c# - Unity3D - 抽象类,单一行为功能

c++ - 在专用模板中添加运算符重载

c - 在 C 中遇到数组结构问题